我正在尝试执行以下操作:
- 向用户显示包含大量文件的网格
- 用户可以选择任意数量的文件
- 应提示用户输入目标位置的每个文件
- 每个文件应依次下载
我找不到一个好的解决方案,因为:
- 我需要一个跨浏览器解决方案(无插件),但我可以依赖 IE10+ 和 HTML5
- 这些文件不应以 zip 文件或任何其他存档的形式下载
- 使用
document.write
插入多个 iframe 感觉很糟糕,并且大多数浏览器都不鼓励
最佳答案
我设法构建了一个使用 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 用户名中包含非拉丁字符的用户无法下载这些文件。
如果您使用临时文件系统存储,则无法恢复下载。 (当我尝试两次访问下载的文件时,Chrome 在我的机器上抛出错误)
还要注意循环,因为它可能会破坏其他人的浏览器。
我只能说,这目前还不是一个解决方案,而且 API 还没有准备好供大众使用。您可以通过使用 Flash 和其他实用程序来添加进一步的支持,以弥补文件系统 API 支持的不足。
工作原理:
一旦用户单击下载链接,我的脚本就会使用服务器端 PHP 脚本收集有关文件的信息。之后,它请求一些 block ,直到本地存储的文件的文件大小与 php 脚本发送的文件大小匹配。
文件准备好后,我创建一个不可见的 a 标记并将 href 设置为“filesystem:myurl.de/theFile”,并触发该链接上的单击事件。我还添加了“下载”属性,以便浏览器也被迫下载 .txt 文件。
这并不能完全解决您的问题,但您可以检查源代码并希望构建一些能够满足您需求的东西。我猜您已经开始采用不同的方法来下载多个文件。
关于javascript - 依次发送多个文件给用户下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25031477/