从浏览器按顺序从Azure Blob存储下载文件
简介背景:我有一个将文件存储在Azure Blob存储中的Web服务。该服务的用户可以一次下载多个文件。如果下载的所有文件的总文件大小相对较小,那么我将ZIP文件压缩到我的服务器上并返回该ZIP文件 - 这里没有问题。从浏览器按顺序从Azure Blob存储下载文件
场景:例如,如果用户想下载3个每个文件大小为1GB的文件,将这些文件下载到服务器并不现实,请将其压缩并将ZIP文件返回给浏览器。因此,对于这些场景,我会将Azure Blob存储URL返回给浏览器,并让用户直接从Azure Blob存储下载文件,以免对我的服务器造成压力。
问题:目前,浏览器只收到所有这些URL并一次下载它们。我需要一种顺序下载这些文件的方式。因此,浏览器会收到Blob存储URL列表并一次下载一个。但是,我完全不知道如何在浏览器上检测到一个下载完成并且另一个可以开始。
任何意见/建议,我应该如何处理这个问题是值得欢迎的。
编辑:我的前端接收下载ID的列表,并开始下载
for(var i = 0; i < listOfDownloads.length; i++) { //Go direct to Azure blob storage for each ID in list of IDs
//This immediately begins a download direct from blob storage
window.location.href = {azure blob storage URL};
//Find way of detecting when download complete so can move on to next
}
回答:
你可以尝试jquery.fileDownload库Promise
:
function downloadFilesSequantially(listOfDownloads) { function downloadComplete(link) {
return new Promise(function(res, rej) {
$.fileDownload(link)
.done(function() {
res(0);
})
.fail(function() {
rej(0);
});
})
}
listOfDownloads.reduce(function(prev, next) {
return prev.then(downloadComplete(next));
}, Promise.resolve(0))
}
你也应该修改这个库,因为它需要作为回应,您无法提供由于直接链接到斑点(if
的陈述条件被替换):
if (true/*document.cookie.indexOf(settings.cookieName + "=" + settings.cookieValue) != -1*/) { //execute specified callback
internalCallbacks.onSuccess(fileUrl);
//remove the cookie and iframe
document.cookie = settings.cookieName + "=; expires=" + new Date(1000).toUTCString() + "; path=" + settings.cookiePath;
cleanUp(false);
return;
}
以上是 从浏览器按顺序从Azure Blob存储下载文件 的全部内容, 来源链接: utcz.com/qa/263213.html