Node.js Azure Blob存储-上载有进度的文件
我有以下代码-将文件上载到Azure Blob存储非常正常,但是,当我上载文件而不是多次执行Node.js Azure Blob存储-上载有进度的文件,node.js,progress-bar,azure-storage,Node.js,Progress Bar,Azure Storage,我有以下代码-将文件上载到Azure Blob存储非常正常,但是,当我上载文件而不是多次执行onProgress时,我只使用file.size值将其执行一次(并且始终执行一次)(因此它正在缓慢地发送)文件到Azure,但progress仅在完成后执行一次 const requestOptions=this.mergeWithDefaultOptions(perRequestOptions); const client=this.getRequestClient(requestOptions);
onProgress
时,我只使用file.size值将其执行一次(并且始终执行一次)(因此它正在缓慢地发送)文件到Azure,但progress仅在完成后执行一次
const requestOptions=this.mergeWithDefaultOptions(perRequestOptions);
const client=this.getRequestClient(requestOptions);
const containerClient=await client.getContainerClient(this.options.containerName);
const blobClient=await containerClient.getBlockBlobClient(file.name);
const uploadStatus=await blobClient.upload(file.buffer,file.size,{onProgress:progressCallBack});
我想知道的是,这个库的结果是否正常(对于从azure下载文件,相同的方法可以正常工作)。根据我的测试,该方法是一种非并行上载方法,它只向azure Storage server发送一个请求。有关更多详细信息,请参阅。 因此,如果您希望多次执行
onProgress
,我建议您使用uploadStream
方法。它使用operation和operation来上传。有关详细信息,请参阅
比如说
try {
var creds = new StorageSharedKeyCredential(accountName, accountKey);
var blobServiceClient = new BlobServiceClient(
`https://${accountName}.blob.core.windows.net`,
creds
);
var containerClient = blobServiceClient.getContainerClient("upload");
var blob = containerClient.getBlockBlobClient(
"spark-3.0.1-bin-hadoop3.2.tgz"
);
var maxConcurrency = 20; // max uploading concurrency
var blockSize = 4 * 1024 * 1024; // the block size in the uploaded block blob
var res = await blob.uploadStream(
fs.createReadStream("d:/spark-3.0.1-bin-hadoop3.2.tgz", {
highWaterMark: blockSize,
}),
blockSize,
maxConcurrency,
{ onProgress: (ev) => console.log(ev) }
);
console.log(res._response.status);
} catch (error) {
console.log(error);
}
我也这么认为,但是我不明白为什么你需要在一次执行的函数中执行
onProgress
。我将此设置为答案,因为它证实了我的想法。谢谢@Seti因为它对你很有用,你能接受它作为一个答案吗: