5

入力は可変数の URL (リモート) で、すべてリンク イメージ リソースです。ユーザーがこれらの URL をすべて 1 回のバッチでダウンロードできるようにすることが望まれます。1000 ~ 2000 の画像リソースについて話しているため、ユーザーにすべての URL で [名前を付けて保存...] をクリックするよう求めることは現実的ではありません。

私の最初の試みは、すべての画像を blob にダウンロードすることでした (ロードされた画像を blob に読み込むには?、同一生成元ポリシーのために機能しませんでした)、ファイルをアーカイブし、ユーザーがダウンロードできるようにします (このクライアントのすべて側)。

可能な代替ソリューションは何ですか?解決策が何であれ、リモート リソースをサーバーにダウンロードする必要はありません。

4

2 に答える 2

1

不可能なはずですが、私は Chrome で魔術を使ってこれを行うことができました。downloadまず、すべてのリンク f.ex に属性を設定する必要があります。

<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 では、「このサイトでは複数のファイルをダウンロードする必要があります。許可しますか?」のような警告が表示されます。しかし、これは扱いやすいかもしれません。

免責事項:他のブラウザーで試したことはありません。クロスブラウザー フレンドリーではないと思います。

于 2012-12-19T11:25:54.377 に答える
0

ユーザーの好みに基づいて、サーバー側でアーカイブを準備し、ユーザーにパッケージをダウンロードさせる以外に、これ以上良いことは考えられません。

バイナリデータとローカルファイルシステムをもう少し制御できるブラウザ拡張機能をユーザーにインストールしてもらうことができると思いますが、それがあなたが探しているものであるとは思えません。

于 2012-12-19T11:25:33.830 に答える