2012-03-15 10 views
5

Ho un file HTML in linea che genera e salva un file CSV impostando window.location aScaricare un file modificando window.location w/Safari

data:text/csv;base64,Intfa2V5fSIsInt... 

Tuttavia, in Safari questo porta solo il CSV in il browser.

impostazione dell'URL a:

data:application/csv;base64,Intfa2V5fSIsInt... 

forze Safari per scaricare il file - ma ottiene un nome di file generico di solo 'Unknown-3'. C'è un modo per specificare il nome del file?

risposta

6

In primo luogo, un avviso: application/csv non è un valid MIME type, quindi il fatto che "funzioni" per voi in questo caso è puramente una stranezza di implementazione che potrebbe cambiare molto in futuro. (Per esempio, Safari mostraapplication/octet-stream, che mi aspetto per il download.)

HTML5 ha un new <a download="file.name"> attribute. Ciò impone al browser di scaricare il file sul disco; utilizza il valore dell'attributo come nome file predefinito. Funziona in combinazione con un URI di dati o un URI blob. (Demo)

Tuttavia, al momento è supportato solo da Chrome (14+). Safari 5.1 ignora l'attributo.


Una possibile alternativa è quella di utilizzare il Filesystem API, ma che ti dà una cartella sandbox con cui lavorare. Non è possibile — ad esempio — salvare un file direttamente nella cartella Documenti dell'utente. Invece, è possibile scrivere un file per la sandbox e quindi reindirizzare su file sul nuovo filesystem schema:

location.assign('filesystem:http://example.com/temporary/somefile.csv'); 

Questo dovrebbe richiamare meccanismo di download del programma utente (! Con il nome del file a destra), ma non ho ancora testato questo , quindi è possibile che Safari mostrerà comunque il file.

+0

Il problema è: sembra che Safari non supporti anche l'API di File System. Http: //caniuse.com/#feat=filesystem – user3682091

0

Secondo il numero RFC 2397 n. Non c'è alcun modo.

Leggere anche la domanda relativa this.