我正在尝试执行以下操作:
我无法找到一个好的解决方案,因为:
document.write
插入多个iframe感觉很糟糕,大多数浏览器都不鼓励答案 0 :(得分:1)
我设法构建了一个使用HTML FileSystem API下载多个文件的可能示例。我在构建这个问题时遇到了一些问题,我将在下面记下这些问题。请注意,这只是一个示例,可以通过很多方式进行改进(代码方面和功能方面)。
我停止了开发,因为我无法传输二进制文件,但也许有人可以给我一个如何做到这一点的线索。 (我现在正在努力使用二进制ajax传输和JSON。(我不能说它是否可以在ajax上传输图像/二进制文件)。
在GitHub上发布的源代码: https://github.com/posixpascal/FileSystem-API-Example
您的用户 点击“允许此网页下载多个文件'一旦弹出窗口可见。否则它就无法工作。
这在服务器端使用繁重的I / O操作(至少使用我的 码)。在使用这个脚本之前,应该重写一下。
请注意以下问题:https://code.google.com/p/chromium/issues/detail?id=94314 Windows用户名中包含非拉丁字符的用户无法下载文件。
如果使用TEMPORARY FileSystem Storage,则无法恢复下载。 (当我尝试访问下载的文件两次时,Chrome在我的计算机上引发错误)
还要注意循环,因为它可以阻止其他人的浏览器。
我只能说,目前这不是一个解决方案,而且API还没有为大众做好准备。您可以使用Flash和其他工具来补充进一步的支持,以补偿缺少FileSystem API支持。
用户点击下载链接后,我的脚本会立即使用服务器端PHP脚本收集有关文件的信息。之后它会请求几个块,直到本地存储文件的文件大小与php脚本发送的文件大小相匹配。
一旦文件准备就绪,我创建一个不可见的标签并将href设置为" filesystem:myurl.de/theFile"并在该链接上触发click事件。我还添加'下载'属性因此浏览器也被迫下载.txt文件。
这不是您问题的完全解决方案,但您可以检查源代码,并希望根据您的需求构建一些东西。我猜你已经开始采用不同的方法来下载多个文件。
答案 1 :(得分:1)
我找到了一个适用于所有浏览器的解决方案(对我而言)。它在代码方面感觉不太好(起初)但在不同的浏览器和不同的机器上看起来相当稳定。
Chrome会要求用户允许该网站下载多个文件。 IE根本不关心。
var onDownload = function(){
var docs = module.getSelectedElements();
for(var i = 0; i < docs.length; i ++) {
(function(){
var doc = docs[i];
window.setTimeout(function(){
$jq("#downloadIframe").attr("src", doc.url);
}, i * 500);
})();
}
};