将流上传到Azure Blob存储

时间:2018-12-28 13:23:55

标签: javascript node.js stream azure-storage azure-blob-storage

我会将音频文件上传到Azure Blob存储。 首先,我发出一个http请求以获取文件的URL。

然后,我将其“直接”保存到azure blob存储中,而无需将其存储在服务器中,然后上传。

这是我的代码:

request
  .get(url, {
    auth: {
      bearer: token
    }
  })
  .on("response", async function(response) {
    const res = await blobService.createAppendBlobFromStream(
      "recordings", // container name
      "record.wav",
      response, // should be stream
      177777, // stream length
      function(err, res) {
        try {
          console.log(res);
        } catch (err) {
          console.log(err);
        }
      }
    );
  });

实际上,当我将文件上传到Blob存储中并检查数据库时,我得到了一个空文件,里面没有数据,我认为我发送的数据流不正确。

我期望的是将音频文件保存到blob存储中,其中包含我从get请求中获得的数据

我还应该指定流的长度,但是我不知道如何得到它,所以我放了一个随机数,但是它应该是正确的流长度。我已经检查过response对象,但没有找到该信息。

1 个答案:

答案 0 :(得分:0)

我认为您不能直接上传文件,因此首先要在Blob存储中创建一个文件夹,然后再创建一个文件。 读取所选文件数据,然后使用文件流或其他方法将其写入创建的文件中。

这是上传文件代码,

 app.post('/upload',function(req,res){
 if(req.files.fileInput){
 var file = req.files.fileInput,
 name = file.name,
 type = file.mimetype;
 var uploadpath = __dirname + '/uploads/' + name;
 file.mv(uploadpath,function(err){
  if(err){res.send("Error Occured!")}
  else {res.send('Done! Uploading files')}
  });
}
  else {
  res.send("No File selected !");
  res.end();
};
})