Azure Blob存储几乎对我的所有PUT请求都给出了“请求中止”

时间:2019-03-27 19:53:02

标签: azure-storage-blobs

我正在尝试使用Azure Blob存储来存储Blob,但是大部分时间我都从Blob存储中获得了“请求中止”响应。我在Express API中使用了Node.js v10 SDK,我感到它与我配置服务的方式有关。

我正在使用Azurite模仿Azure存储服务。

在我的app.js中,我在启动时运行函数configureBlobStore()

export const configureBlobStore = async containerName => {
  const sharedKeyCredential = new SharedKeyCredential(
    process.env.AZURE_STORAGE_ACCOUNT_NAME,
    process.env.AZURE_STORAGE_ACCOUNT_ACCESS_KEY,
  );
  const pipeline = StorageURL.newPipeline(sharedKeyCredential);
  serviceUrl = new ServiceURL('http://blob:10000/devstoreaccount1', pipeline);

  if (!containerUrl) {
    containerUrl = ContainerURL.fromServiceURL(serviceUrl, containerName);
    try {
      await containerUrl.create(aborter);
    } catch (err) {
      console.log(err);
      console.log('Container already existed, skipping creation');
    }
  }
  return containerUrl;
};

然后要保存blob,我运行函数saveToBlobStore()

  let { originalname: blobName } = file;
  const blockBlobUrl = BlockBlobURL.fromContainerURL(containerUrl, blobName);
  const uploadOptions = { bufferSize: 4 * 1024 * 1024, maxBuffers: 20 };
  const stream = intoStream(file.buffer);

  try {
    await uploadStreamToBlockBlob(
      aborter,
      stream,
      blockBlobUrl,
      uploadOptions.bufferSize,
      uploadOptions.maxBuffers,
    );

    return blockBlobUrl.url;
  } catch (err) {
    console.error('Error saving blob', err);
    return err;
  }
};

有时候,它可以工作,通常是当我放下容器并进行批量修剪时,但通常它仅对上传的第一个文件有效,而对其他文件则不起作用。有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:1)

发现问题后,我一次创建了一个Aborter,对其进行了缓存并将其用于我的所有调用,但是您需要在每次调用Blob存储之前创建一个新的。