我需要一种简单的方法来允许用户一次上传多个文件(即我需要允许用户上传文件夹)。我不想把压缩的负担放在用户身上。
如果可能的话,我宁愿避免使用Flash或变种。如果可能的话,我正在寻找一个直接的javascript / HTML解决方案。请注意,这排除了答案:What is the best client side browser library to upload multiple files over http?。
答案 0 :(得分:26)
仅使用HTML和Javascript就无法做到这一点。我建议您尝试使用Fancy Upload MooTools插件进行多个文件上传。它使用JavaScript和Flash的混合,但优雅地降级。它适用于所有主流浏览器,包括IE6,还有可下载的Flash 10兼容版本(虽然该演示尚未更新)。
更新(2012-11-26):
对于递归目录上传,您最好的解决方案是使用Chrome 11's new folder upload API。如果您使用供应商前缀,它似乎也适用于Firefox。
答案 1 :(得分:4)
随着Firefox 42和Edge实施新的directory upload proposal,我们终于能够进行跨浏览器目录上传。这些API非常糟糕,您可能需要查看我的包装器uppie。
答案 2 :(得分:3)
如果您正在避免使用Flash(可能是Java?),那么仅使用JS / HTML的解决方案仍然需要单个文件input
,但基本上您会将onchange
事件附加到{{1}每当选择文件时,都会向DOM添加一个新的input
。
答案 3 :(得分:2)
FTP?如果是necs,请用Java Applet,ActiveX或任何你想要的东西包装。
如果没有,虽然你不想要闪存,但SWFUpload非常酷,你可能想重新考虑它作为一个不错的选择。
答案 4 :(得分:2)
对于递归目录上传,您的选项更受限制:
您最好的解决方案是使用Chrome 11's new folder upload API。如果您使用供应商前缀,它似乎也适用于Firefox。
这也可以与Java applet进行跨浏览。然而,这些天安装了JRE的人数百分比相当低(< 70%)
答案 5 :(得分:1)
这不是纯粹的js / html解决方案。正如EndangeredMassa指出的那样,这是不可能的。实际上,这个想法是IE / Windows唯一的解决方案。我不推荐它,但它可以工作。
所以,除了所有免责声明......
多年前和几个雇主之前,我们曾经做过一些实例化FileSystemObject的客户端内容。它将遍历每个文件并一次一个地传递给服务器。不记得我们如何做到这一点的细节:o(
无论如何,这通常意味着客户端框需要将站点添加到受信任站点列表中,并为受信任站点提供一系列被关闭的权限(出于非常好的理由)。就像初始化和编写未标记为安全的ActiveX控件的脚本一样。那种事。
我知道这不是一个完美的答案,但它可以指出你正确的方向。
答案 6 :(得分:1)
Here是使用ExtJS库的纯JS解决方案