将多个文件依次发送给用户下载

Send multiple files to the user for download one after another

本文关键字:给用户 下载 文件      更新时间:2023-09-26

我想做以下事情:

  • 一个包含大量文件的网格显示给用户
  • 用户选择任意数量的文件
  • 应该提示用户输入目标位置的每个文件
  • 每个文件应该一个接一个下载

我找不到一个好的解决方案,因为:

  • 我需要一个跨浏览器的解决方案(没有插件),但我可以依靠IE10+和HTML5
  • 文件不应该以zip文件或任何其他存档文件的形式下载
  • 使用document.write插入多个iframe感觉很糟糕,大多数浏览器都不鼓励使用

我设法构建了一个使用HTML文件系统API下载多个文件的可能示例。我在构建这个时遇到了一些问题,我将在下面注明。请注意,这只是一个示例,还可以进行很多改进(代码方面和功能方面)。

我停止了开发,因为我无法传输二进制文件,但也许有人可以给我一个关于如何做到这一点的线索。(目前我正在与二进制ajax传输和JSON作斗争。(我不能说是否有可能通过ajax传输图像/二进制文件)。

在GitHub上发布的源代码:https://github.com/posixpascal/FileSystem-API-Example

注意事项:

  • 您的用户点击'允许此网页下载多个文件'一旦弹出可见。否则它将无法工作。

  • 这会在服务器端使用大量的I/O操作(至少对于我的代码)。在使用此脚本之前,应该重写该脚本。

  • 请注意此问题:https://code.google.com/p/chromium/issues/detail?id=94314Windows用户名中有非拉丁字符的用户无法下载文件。

  • 如果您使用临时文件系统存储,则无法恢复下载。(当我尝试访问下载的文件两次时,Chrome会在我的机器上抛出错误)

  • 也要注意循环,因为它可以搞砸别人的浏览器。

    1. Youtube示例:https://www.youtube.com/watch?v=F9T4i4qrYtc&list=UUi1sRIczZxhsuWPPUK7xxTA
    2. 实例:http://pascalraszyk.de/_broken_do_not_use/

我只能说,目前这还不是一个解决方案,API还没有准备好大规模使用。您可以通过使用Flash和其他实用程序来添加进一步的支持,以弥补文件系统API支持的不足。

工作原理:

一旦用户单击下载链接,我的脚本就会使用服务器端PHP脚本收集有关文件的信息。之后,它请求一些块,直到本地存储文件的文件大小与php脚本发送的文件大小匹配。

一旦文件准备好,我就创建一个不可见的a标记,并将href设置为filesystem:myurl.de/theFile"并触发该链接上的单击事件。我还添加了'download'属性,这样浏览器也会强制下载。txt文件。

这不是一个完全解决你的问题,但你可以检查源代码,并希望建立一些东西来满足你的需要。我猜您已经使用了另一种方法来下载多个文件。

我找到了一个适用于所有浏览器的解决方案。它在代码方面感觉不太好(一开始),但对我来说,它在不同的浏览器和不同的机器上似乎相当稳定。

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);
           })();
       }
};