我正在尝试使用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;
}
};
有时候,它可以工作,通常是当我放下容器并进行批量修剪时,但通常它仅对上传的第一个文件有效,而对其他文件则不起作用。有谁知道为什么会这样?
答案 0 :(得分:1)
发现问题后,我一次创建了一个Aborter
,对其进行了缓存并将其用于我的所有调用,但是您需要在每次调用Blob存储之前创建一个新的。