2009-04-07 15 views
8

Mi chiedevo se esistesse un metodo per implementare il prompt del file di download del browser utilizzando JavaScript.Richiesta file download per browser utilizzando JavaScript

Motivo per cui gli utenti caricheranno file su un fileserver locale a cui non è possibile accedere dal server web. In altre parole, entrambi saranno su domini diversi!

Ad esempio, supponiamo che i siti Web ospitati su www.xyz.com, ma i file risiedano su file server locale con indirizzo come \\10.10.10.01\Files\file.txt. Come faccio a caricare/trasferire file sul fileserver locale ... usando ActiveX e VBscript! (non chiedere :-)

Quindi sto memorizzando il percorso del file locale nel mio database e legando i dati a una griglia. Quando l'utente fa clic su quel collegamento, il file si apre in una finestra (utilizzando JavaScript).

Il problema è che alcuni tipi di file come testo, jpg, pdf, ecc. Si aprono nella finestra del browser. Come potrei essere in grado di implementare content-type o content-disposition usando lo scripting lato client? È possibile?

MODIFICA: il file server locale ha una cartella condivisa di una finestra in cui vengono salvati i file.

+0

Che tipo di server è il tuo 'file server locale'? Un vero server HTTP/FTP/qualunque o stai parlando delle cartelle condivise di Windows (cioè intendevi '\\ 10.10.10.01' invece di' // 10.10.10.01'? – Christoph

+0

Una cartella condivisa in windows e un percorso effettivo per il file sarebbe '\\ 10.10.10.01 \ Files \ file.txt' – aix

+0

@aix: allora non sei fortunato: non c'è modo di inviare le meta-informazioni appropriate tramite le intestazioni HTTP – Christoph

risposta

5

"content-disposition: attachment" è praticamente l'unico modo per forzarlo e DEVE essere impostato nell'intestazione della risposta.

+0

Come posso impostarlo sul lato client ? Attualmente sto usando javascript per aprire il file. Chiamando window.open ('\\ 10.10.10.01 \ Files \ file.t xt ') per aprire il file. Questo aprirebbe il file in una finestra. Isnt "content-disposition: attachment" un'impostazione dell'intestazione di risposta lato server? – aix

+0

Poiché la domanda diceva "questo deve essere impostato nell'intestazione della risposta", non è possibile impostarlo sul client. – Quentin

1

Si potrebbe provare a utilizzare un semplice collegamento ipertestuale con type="application/octet-stream". Sembra funzionare in FF, ma IE e Opera ignorano l'attributo.

+0

Secondo le specifiche, IE e Opera hanno ragione. L'attributo type dice "Aspettalo dal server" in modo che i client che non comprendono un particolare tipo di contenuto possano evitare di preoccuparsi di provare a scaricarlo (molto utile con i bot).Il vero Content-Type lo supera. – Quentin

+0

A mio parere, IE e Opera sono errati: in assenza di altre informazioni sul tipo di contenuto (che è il caso qui), il "suggerimento di consulenza" (specifica HTML) dato dal tipo atttribute dovrebbe essere rispettato dal browser; ricorda che il file non viene inviato tramite HTTP, quindi non esiste un campo di tipo contenuto che possa superare l'attributo – Christoph

4

Se il file è ospitato su un server web come nel tuo esempio, si può fare:

window.location.replace(fileUrl); 

.. e il browser sarà capire cosa fare con il file. Funziona alla grande per la maggior parte dei file, come .xls, .csv, etc, ma tieni presente che questo non è a prova di tutto perché le impostazioni del gestore MIME dell'utente determineranno cosa fare con il file ... cioè se è un file .txt sarà probabilmente visualizzato nel browser e non verrà visualizzata una finestra di dialogo per il download del file.

+0

Nota che questo significa che puoi metterlo nella barra degli indirizzi: 'data: testo/csv, a, b, c% 0ad, e, f' (questo crea un download di file CSV con 3 colonne e 2 righe). Non sono sicuro che sia in linea con la domanda originale, ma cercando su google come creare quel prompt, sono finito qui. Forse aiuta i futuri lettori :) – Luc

3

A partire da agosto 2015, l'aggiunta dell'attributo "download" al tag consente il comportamento che stai cercando, almeno in Chrome.

+1

Sfortunatamente non il supporto di cross-origine su Firefox e non funziona su Safari, Edge e IE, questo rende l'attributo di download inutile per me: / – Sojtin

Problemi correlati