2011-06-24 13 views
8

Me preguntaba si es posible forzar a un navegador (al menos Chrome) a descargar una URL data:text/plain.Descargue la descarga de 'data: text/plain' URL

Chrome descarga URL binarias (por ejemplo, data:application/zip;base64,...), pero no descarga archivos que se pueden ver dentro del navegador (como archivos de texto).

lo que ya intentado sin suerte hasta ahora es la siguiente:

data:text/plain;content-disposition=attachment;filename=test.txt;... 

pero parece que no puedo agregar encabezados como este.

¿Hay alguna manera de hacer que Chrome descargue una URL data:text/plain,...?

Respuesta

12

A partir de ahora, ha sido posible utilizar <a download> en Chrome. Usando dispatchEvent, puede descargar cualquier cadena como archivo (incluso con un nombre de archivo personalizado) siempre que lo desee. He aquí una función de utilidad para usarlo:

var downloadFile = function(filename, content) { 
    var blob = new Blob([content]); 
    var evt = document.createEvent("HTMLEvents"); 
    evt.initEvent("click"); 
    $("<a>", { 
    download: filename, 
    href: webkitURL.createObjectURL(blob) 
    }).get(0).dispatchEvent(evt); 
}; 

Uso:

downloadFile("foo.txt", "bar"); 

Se utiliza jQuery y el webkit prefijo, pero ambos se pueden evitar.

1

Lo que hice fue enviar los datos a un servidor, que los envía de vuelta con el siguiente encabezado HTTP:

Content-disposition: attachment;filename=test.txt 

no me gusta esto, pero funciona bastante bien.

6
Try this: 
<a download="file_downloaded_via_data_URL.txt" 
href="data:text/plain;base64,SGVsbG8sIHdvcmxkISBJJ20gZG93bmxvYWRlZCB2aWEgImRhdGE6dGV4dC9wbGFpbjsuLi4iIFVSTCB1c2luZyA8YSBkb3dubG9hZD0iZmlsZV9uYW1lIi4uLj4uDQpNeSBiaXJ0aHBsYWNlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzY0Njg1MTcvDQoNCk1vcmUgYWJvdXQ6DQpodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sL2xpbmtzLmh0bWwjYXR0ci1oeXBlcmxpbmstZG93bmxvYWQNCmh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWwvbGlua3MuaHRtbCNkb3dubG9hZGluZy1yZXNvdXJjZXMNCg0KQnJvd3NlciBzdXBwb3J0OiBodHRwOi8vY2FuaXVzZS5jb20vZG93bmxvYWQ="> 
    Download text file 
</a> 

Utiliza el atributo HTML5 download="filename.ext". (Sin JS necesitaba :)

Más sobre: ​​ http://www.w3.org/TR/html/links.html#downloading-resources

Compatibilidad del navegador se puede comprobar en http://caniuse.com/download

(Por el momento, 2013, no Ie ni asistencia de Safari)

pienso, puede hacer una reserva para navegadores no compatibles: utilice JS para cambiar el valor de href="..." a la URL de su secuencia de comandos del servidor (que devolverá el contenido del archivo con el encabezado HTTP correspondiente Content-disposition: attachment;filename=filename.txt).

+0

esto es increíble, algunos navegadores nuevos no son compatibles con la URL de datos en este momento en 2017 – code4j

0

Esto funciona como el demonio ...

<div class="tags-style-one dragme" draggable="true" data-transfer="33343">some value is 33343</div> 

    <script type="text/javascript"> 
    (function ($) { 
     $(document).ready(function() { 
     $('.dragme').on("dragstart",function(evt) { 
      evt.originalEvent 
        .dataTransfer 
        .setData(
          "text/plain", 
          $(this).data('transfer').toString() 
        ); 
     }); 
    })(jQuery); 
</script> 
Cuestiones relacionadas