我最后一天搜索了一个API来发送数据,从Javascript客户端到我的NodeJS服务器,代码如下。
app.post('/microphone', express.raw({type: "*/*", limit: '1000000mb' }), function(req, res)
{
var buffer = req.body.buffer;
var nbrVoice = req.body.nbrVoice;
var codeUser = req.body.codeUser;
var dirUsers = "users/"+codeUser+"/";
fs.appendFileSync(( dirUsers +nbrVoice+ '_microphone.wav'), buffer );
res.send( "Okay wav file saved );
});
我有一个带有expressjs的服务器,我想发送一个带有两个数字的DataView或Blob
[blob, codeUser, nbrVoice ]
我尝试使用 xmlhttprequest,这是该调用 fetch 的现代版本,但不起作用,并且我被原始二进制数据阻止以字符串形式在服务器上缓冲数据。
如果有人有想法,我会搜索没有 jquery 的代码。
您可以将文件作为 base64 字符串发送,但为什么要麻烦:只需使用适合这种情况的工具:在客户端上使用
form data
,在快递上使用 multer
。
示例:将文件和其他数据附加到
FormData
,并在服务器上使用multer
来处理文件(存储在req.file
中)和其他数据(存储在req.body
中),您可以将文件保存在内存中并然后使用req.file.buffer
保存(查看multer
文档,您可以通过相应的方法(destination
等)完整地处理文件:
// client
let formData = new FormData();
formData.append('codeUser', 'codeUser');
formData.append('nbrVoice', 'nbrVoice');
formData.append('file', YourBlob);
fetch('/microphone', {
method: 'POST',
body: formData,
}).then(async(result) => {
console.log(await result.text());
})
.catch((error) => {
console.log(error);
});
// server
const storage = multer.memoryStorage();
const upload = multer({ storage });
// read `file` field from formdata
app.post('/fajla', upload.single('file'), (req, res)=>{
console.log(req.file, req.body);
fs.appendFileSync(( dirUsers +nbrVoice+ '_microphone.wav'), req.file.buffer );
res.send( "Okay wav file saved ");
});