【发布时间】:2021-03-24 21:54:10
【问题描述】:
我正在尝试将多个文件同时从 JavaScript 上传到 Azure BLOB 存储。我不确定它是如何处理并行性的,但我正在尝试为每个文件/上传/承诺设置单独的进度条。
现在调用进度函数但只给出“loadedBytes”我需要一种方法来知道要更新哪个进度条。有人建议 onload 给出一个标识符,它似乎没有 onload 事件。当我使用下面的代码时,索引始终是循环中的最后一个。
try {
console.log("Uploading files…");
var inputElement = document.getElementById('fileSelector');
const promises = [];
for (var fileIndex = 0; fileIndex < inputElement.files.length; fileIndex++) {
const file = inputElement.files[fileIndex];
var thisToken = await this.Instance.invokeMethodAsync('jsGetSASToken', file.name);
var containerURL = new azblob.ContainerURL(thisToken, azblob.StorageURL.newPipeline(new azblob.AnonymousCredential));
const blockBlobURL = azblob.BlockBlobURL.fromContainerURL(containerURL, file.name);
var blobUploadOptions = {
blockSize: 4 * 1024 * 1024, // 4MB block size
parallelism: 20, // 20 concurrency
metadata: { 'testindex': fileIndex.toString() },
progress: function (ev) {
var percentdone = ((ev.loadedBytes / file.size) * 100);
// Jumps around because loadedBytes is different for each upload
document.getElementById('percentdone-' + fileIndex).innerHTML = percentdone.toFixed(2) + "%";
// fileIndex is always the last item in the loop
}
};
promises.push(
azblob.uploadBrowserDataToBlockBlob(
azblob.Aborter.none,
file,
blockBlobURL,
blobUploadOptions
)
);
}
await Promise.all(promises);
console.log('Done.');
} catch (error) {
console.log("File Upload Error");
console.log(error);
}
【问题讨论】:
-
嗨@TimDavis,我可以知道现在怎么样了吗?如果我的回答对你有帮助,请采纳吗?
标签: javascript azure azure-blob-storage