【问题标题】:How to force/allow the user to download multiple files? (client side)如何强制/允许用户下载多个文件? (客户端)
【发布时间】:2012-12-19 11:05:39
【问题描述】:

输入是可变数量的 URL(远程),所有链接图像资源。希望允许用户允许批量下载所有这些 URL。由于我们谈论的是 1000-2000 个图像资源,因此要求用户为每个 URL 点击“另存为...”是不可行的。

我最初的尝试是将所有图像下载到一个 blob 中(How to read loaded image into a blob?,由于同源策略而无法工作),存档文件并允许用户下载它(所有此客户端)。

我想知道有哪些可能的替代解决方案?无论解决方案是什么,都不得涉及随时将远程资源下载到服务器。

【问题讨论】:

    标签: javascript html flash


    【解决方案1】:

    虽然这不应该是可能的,但我还是设法在 Chrome 中用一些魔法做到了这一点。首先,您需要为所有链接 f.ex 设置 download 属性:

    <a href="http://example.com/image1.jpg" download>download</a>
    <a href="http://example.com/image2.jpg" download>download</a>
    

    然后创建一个合成点击函数:

    function makeClick(element) {
        var evt = element.ownerDocument.createEvent('MouseEvents');
        evt.initMouseEvent('click', true, true,
            element.ownerDocument.defaultView, 1, 0, 0, 0, 0, false,
            false, false, false, 1, null);
        element.dispatchEvent(evt);
    }​
    

    然后只需遍历您的链接并调用它:

    var links = document.getElementsByTagName('a');
    for(var i=0;i<links.length; i++) {
        makeClick(links[i]);
    }
    

    这是一个演示:http://jsfiddle.net/37pFC/

    在 Chrome 中,您会收到类似“此站点希望您下载多个文件。允许吗?”的警告。但这可能是可以管理的。

    免责声明:我没有在其他浏览器中尝试过,我认为它不是非常友好的跨浏览器。

    【讨论】:

      【解决方案2】:

      我真的想不出更好的办法,只能根据用户的偏好在服务器端准备一个存档,然后让用户下载包。

      我猜你可以让用户安装一个浏览器扩展,允许对二进制数据和本地文件系统进行更多控制,但我怀疑这就是你要找的。​​p>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-04
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 2010-10-15
        • 1970-01-01
        相关资源
        最近更新 更多