2012-03-15 13 views
5

Tengo un archivo HTML en línea que genera y guarda un archivo CSV mediante el establecimiento de window.location aDescarga un archivo cambiando window.location w/Safari

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

Sin embargo, en Safari esto sólo nos lleva a la CSV en el navegador.

Ajuste de la url para:

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

fuerzas Safari para descargar el archivo - pero se vuelve un nombre de archivo genérico de poco 'Unknown-3'. ¿Hay alguna forma de especificar el nombre del archivo?

Respuesta

6

En primer lugar, una advertencia: application/csv no es un valid MIME type, por lo que el hecho de que "funcione" para usted en este caso es puramente una peculiaridad de implementación que muy bien podría cambiar en el futuro. (Por ejemplo, Safari muestra application/octet-stream, que yo esperaría para descargar.)

HTML5 tiene un new <a download="file.name"> attribute. Esto obliga al navegador a descargar el archivo en el disco; usa el valor del atributo como el nombre de archivo predeterminado. Funciona junto con un URI de datos o un URI de blob. (Demo)

Sin embargo, actualmente solo es compatible con Chrome (14+). Safari 5.1 ignora el atributo.


Una posible alternativa es utilizar el Filesystem API, pero que le da una carpeta de espacio aislado para trabajar. No puede — por ejemplo — guardar un archivo directamente en la carpeta Documentos del usuario. En su lugar, se puede escribir un archivo en la caja de arena y luego redirigir a presentar en el nuevo filesystem esquema:

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

Esto se debe invocar mecanismo de descarga de la UA (! Con el nombre correcto), pero no he probado esto , por lo que es posible que Safari solo muestre el archivo de todos modos.

+0

El problema aquí es: parece que safari no es compatible con la API del sistema de archivos ... http: //caniuse.com/#feat=filesystem – user3682091

Cuestiones relacionadas