2012-12-19 14 views
5

L'input è un numero variabile di URL (remoti), tutti che collegano la risorsa immagine. Si desidera consentire all'utente di consentire il download di tutti questi URL in un unico batch. Poiché stiamo parlando di 1000-2000 risorse di immagini, chiedere all'utente di fare clic su "Salva con nome ..." per ogni URL non è fattibile.Come forzare/consentire all'utente di scaricare più file? (lato client)

Il mio tentativo originale era quello di scaricare tutte le immagini in un blob (How to read loaded image into a blob?, non ha funzionato a causa della politica dell'origine stessa), archiviare il file e consentire all'utente di scaricarlo (tutto questo lato client).

Mi chiedevo quali sono le possibili soluzioni alternative? Qualunque sia la soluzione, non deve comportare il download delle risorse remote sul server in qualsiasi momento.

risposta

0

Non riesco davvero a pensare a qualcosa di meglio, ma a preparare un archivio sul lato server, in base alle preferenze dell'utente, e quindi l'utente scarica il pacchetto.

Immagino che tu possa avere l'utente di installare un'estensione del browser che consentirebbe un controllo un po 'più sui dati binari e sul filesystem locale, ma dubito che sia quello che stai cercando.

1

Anche se non dovrebbe essere possibile, sono riuscito a farlo in Chrome con qualche stregoneria. In primo luogo è necessario impostare il download attrbute a tutti i vostri link f.ex:

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

quindi creare una funzione di clic sintetico:

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

Poi basta scorrere il vostro link e lo chiamano:

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

Ecco una demo: http://jsfiddle.net/37pFC/

In Chrome riceverai un avviso che dice qualcosa come "Questo sito vuole che tu scarichi più file. Consenti ", ma questo potrebbe essere gestibile

Esonero di responsabilità:?.. havent provato in altri browser, e non credo che sia molto cross-browser amichevole