http使用单个操作下载多个文件
我不确定使用标准的web技术是否可以做到这一点
我希望用户能够在一次操作中下载多个文件。也就是说,单击文件旁边的复选框,然后获取所有选中的文件
有可能吗?如果有,你推荐什么基本策略。我知道我可以使用comets技术创建触发HttpResponse的服务器端事件,但我希望有一种更简单的方法
你可以在下面搜索框中键入要查询的问题!
我不确定使用标准的web技术是否可以做到这一点
我希望用户能够在一次操作中下载多个文件。也就是说,单击文件旁边的复选框,然后获取所有选中的文件
有可能吗?如果有,你推荐什么基本策略。我知道我可以使用comets技术创建触发HttpResponse的服务器端事件,但我希望有一种更简单的方法
最简单的方法是将多个文件捆绑到一个ZIP文件中
我想您可以使用一堆iFrame或弹出窗口启动多个文件下载,但从可用性的角度来看,ZIP文件更好。谁想点击浏览器将弹出的十个“另存为”对话框
HTTP不支持一次下载多个文件
有两种解决方案:
iframe答案的jQuery版本:
function download(files) {
$.each(files, function(key, value) {
$('<iframe></iframe>')
.hide()
.attr('src', value)
.appendTo($('body'))
.load(function() {
var that = this;
setTimeout(function() {
$(that).remove();
}, 100);
});
});
}
var links = [
'https://s3.amazonaws.com/Minecraft.Download/launcher/Minecraft.exe',
'https://s3.amazonaws.com/Minecraft.Download/launcher/Minecraft.dmg',
'https://s3.amazonaws.com/Minecraft.Download/launcher/Minecraft.jar'
];
function downloadAll(urls) {
var link = document.createElement('a');
link.setAttribute('download', null);
link.style.display = 'none';
document.body.appendChild(link);
for (var i = 0; i < urls.length; i++) {
link.setAttribute('href', urls[i]);
link.click();
}
document.body.removeChild(link);
}
;
<button onclick="downloadAll(window.links)">Test me!</button>
;
# 1 楼答案
您可以创建一组临时隐藏的iFrame,在其中通过GET或POST启动下载,等待下载启动并删除iFrame:
或者,如果没有jQuery:
# 2 楼答案
此解决方案可以跨浏览器工作,并且不会触发警告。这里我们不是创建一个
iframe
,而是为每个文件创建一个链接。这样可以防止弹出警告消息为了处理循环部分,我们使用
setTimeout
,这是它在IE中工作所必需的更新2021:我知道“运行代码片段”不再有效,但这是由于跨站点cookie问题。如果将代码部署在您自己的站点上,则该代码可以正常工作