【问题标题】:Save file to azure storage using streams not working使用流不工作将文件保存到 Azure 存储
【发布时间】:2021-05-29 05:59:03
【问题描述】:

我想使用azure-storage package将文件从流中保存到流容器中

这是我获取流的方法

let request = rp(options).on("response", async (response) => {
  if (response.statusCode === 200) {
    await insertFile("TTSOutput.wav", request, request.length);
}

这是我将其保存到 Azure 中的方法

var insertFile = async function (blobName, stream) {
  try {
    blobService = await azure.createBlobService(connStr);

    blobService.createContainerIfNotExists(
      containerName,
      {
        publicAccessLevel: "blob",
      },
      (err, result, response) => {
        if (!err) {
          let resultstream = blobService.createWriteStreamToBlockBlob(
            containerName,
            blobName
          );
          stream.pipe(resultstream);
        }
      }
  );
}

实际上只创建了容器,没有上传文件

【问题讨论】:

  • 您的意思是写await insertFile("TTSOutput.wav", response, response.length); 而不是await insertFile("TTSOutput.wav", request, request.length); 吗?

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


【解决方案1】:

尝试使用以下代码从 Azure TTS API 上传 .wav 文件:

let request = rp(options)
        .on('response', (response) => {
            if (response.statusCode === 200) {
                tempFilePath = 'd:/temp.wav'
                request.pipe(fs.createWriteStream(tempFilePath));
                insertFile('TTSOutput.wav',fs.createReadStream(tempFilePath)).then(function(){
                    fs.unlinkSync(tempFilePath)
                    console.log("uploaded")})
            }
        });

insertFile函数:

const {
    BlobServiceClient
  } = require('@azure/storage-blob');

var conn_str = '<storage account connection string>'
var container = '<your container name>'

async function insertFile(blobName, stream) {
   
    BlobServiceClient.fromConnectionString(conn_str).getContainerClient(container).getBlockBlobClient(blobName).uploadStream(stream)

}

结果:

如果您还有其他问题,请告诉我。

【讨论】:

    【解决方案2】:

    如果您的意思是将流上传到 Azure 存储 Blob,请尝试createBlockBlobFromStream 方法。

    var myStream = getSomeStream(); // Assume getSomeStream() returns a readable stream
    var myStreamLength = getSomeStreamLength(); // return the length of stream
    blobService.createBlockBlobFromStream(
        containerName,
        'stream-blob-name',
        myStream,
        myStreamLength,
        function(error, result, response){
            if(error){
                console.log("Couldn't upload stream");
                console.error(error);
            } else {
                console.log('Stream uploaded successfully');
            }
        });
    

    【讨论】:

      猜你喜欢
      • 2020-08-25
      • 2021-09-20
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 2021-10-30
      • 2023-04-08
      相关资源
      最近更新 更多