如何将包含其他类型数据的 Blob 发送到 NodeJS ExpressJS

问题描述 投票:0回答:1

我最后一天搜索了一个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 的代码。

javascript node.js express blob
1个回答
0
投票

您可以将文件作为 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 ");
});
© www.soinside.com 2019 - 2024. All rights reserved.