Si por ejemplo sigues el enlace:
data:application/octet-stream;base64,SGVsbG8=
El navegador le pedirá que descargue un archivo que consta de los datos que se mantienen como base64 en el propio hipervínculo. ¿Hay alguna forma de sugerir un nombre predeterminado en el marcado? Si no, ¿hay una solución de JavaScript?
data:application/pdf;name=document.pdf;base64,BASE64_DATA_ENCODED
Respuestas:
Usa el
download
atributo:Ejemplo vivo por html5-demos.appspot.com / ... .
Actualmente funciona en Chrome, Firefox, Edge, Opera y Safari de escritorio, pero no iOS Safari o IE11.
fuente
window.location.replace
. si, por ejemplo, desea crear un dato: uri o uno generado porwindow.URL.createObjectURL
, y descargarlo como archivo, deberá crear un <a> y hacer clic en él: jsfiddle.net/flyingsheep/wpQtH (no,$(...).click()
no funciona)$('<a href="data:text/plain,Test" download="test.txt">')[0].click()
parece funcionar bien aquí (Chrome 23) (nota: utilicé elclick
método nativo , no el de jQuery). Demostración: jsfiddle.net/2zsRWChrome hace esto muy simple en estos días:
fuente
Solo HTML: use el
download
atributo:Solo Javascript: puede guardar cualquier URI de datos con este código:
Chrome, Firefox y Edge 13+ usarán el nombre de archivo especificado.
IE11, Edge 12 y Safari 9 (que no admiten el
download
atributo ) descargarán el archivo con su nombre predeterminado o simplemente lo mostrarán en una nueva pestaña, si es de un tipo de archivo compatible: imágenes, videos, archivos de audio , ...fuente
downloadjs
en npmdata:
URI, que es lo que menciona la pregunta. Esta respuesta también funciona con Blobs y cualquier otra cosa que tenga un URISegún RFC 2397 , no, no lo hay.
Tampoco parece haber ningún atributo del<a>
elemento que pueda usar.Sin embargo, HTML5 ha introducido posteriormente el
download
atributo en el<a>
elemento, aunque en el momento de la escritura, el soporte no es universal (no hay soporte de MSIE, por ejemplo)fuente
He buscado un poco en las fuentes de Firefox en netwerk / protocol / data / nsDataHandler.cpp
el manejador de datos solo analiza el contenido / tipo y el conjunto de caracteres, y busca si hay "; base64" en la cadena
el rfc no especifica nombre de archivo y al menos firefox no maneja ningún nombre de archivo para él, el código genera un nombre aleatorio más ".part"
También revisé el registro de Firefox
archivos interesantes si quieres ver las fuentes de mozilla:
Creo que puedes dejar de buscar una solución por ahora, porque sospecho que no hay ninguna :)
como se observó en este hilo, html5 tiene
download
atributo, también funciona en firefox 20 http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-hyperlink-downloadfuente
El siguiente fragmento de Javascript funciona en Chrome mediante el uso del nuevo atributo 'descargar' de enlaces y simulando un clic.
Y el siguiente ejemplo muestra su uso:
fuente
No.
El objetivo es que sea un flujo de datos, no un archivo. La fuente de datos no debe tener ningún conocimiento del agente de usuario que lo maneja como un archivo ... y no lo hace.
fuente
data:
es falsificar un bloque de datos internos en formato URL sin tener que leerlo desde una fuente basada en el protocolo. El enlace en la respuesta de @ silex muestra que la capacidad de sugerir un nombre preferido para escribirlo se considera útil, incluso si aún no está implementado.data:
se inventó específicamente para permitir que el contenido en línea (pequeño) aparezca en un formato de URL falsificado para que pueda ser utilizado por cosas como etiquetas de imagen sin una solicitud HTTP separada. HTML dice que el contenido de unimg src
atributo debe ser una URL, así que eso es lo que creó RFC 2397. No hay "fuente de datos".puede agregar un atributo de descarga al elemento de anclaje.
muestra:
fuente
Mire este enlace: http://lists.w3.org/Archives/Public/uri/2010Feb/0069.html
Citar:
También hay algo de información en los mensajes restantes de la discusión.
fuente
Utilizando trabajadores de servicio , esto finalmente es posible en el sentido más verdadero.
<a href, <img src
, window.open (url), absolutamente cualquier cosa que pueda hacerse con una URL "real".El navegador ahora sugerirá myPrettyName.jpg incluso si el usuario abre el archivo en una nueva pestaña e intenta guardarlo allí. Será exactamente como si el archivo hubiera venido del servidor.
fuente
Hay un pequeño script de solución en Google Code que funcionó para mí:
http://code.google.com/p/download-data-uri/
Agrega un formulario con los datos, lo envía y luego elimina el formulario nuevamente. Hacky, pero hizo el trabajo por mí. Requiere jQuery.
Este hilo apareció en Google antes de la página de Google Code y pensé que podría ser útil tener el enlace aquí también.
fuente
data:...
URI, ese script crea un formulario para PUBLICARLO en el servidor. Y, presumiblemente, el servidor lo repite directamente como una respuesta de "descarga" HTTP (es decir, con un encabezado de Disposición de contenido apropiado que especifique el nombre del archivo).Aquí hay una versión jQuery basada en la versión de Holf y funciona con Chrome y Firefox, mientras que su versión parece funcionar solo con Chrome. Es un poco extraño agregar algo al cuerpo para hacer esto, pero si alguien tiene una mejor opción, estoy a favor.
fuente
$().appendTo()
variable.click(); variable.remove()
[0]
de cualquier "elemento jQuery" debería devolver el primer elemento DOM que representa, que esencialmente "lo saca de" jQuery.Es un poco hack, pero he estado en la misma situación antes. Estaba generando dinámicamente un archivo de texto en javascript y quería proporcionarlo para su descarga codificándolo con el URI de datos.
Esto es posible con una intervención
menor delusuario mayor. Genera un enlace<a href="data:...">right-click me and select "Save Link As..." and save as "example.txt"</a>
. Como dije, esto no es elegante, pero funciona si no necesita una solución profesional.Esto podría hacerse menos doloroso al usar flash para copiar primero el nombre en el portapapeles. Por supuesto, si te permites usar Flash o Java (¿creo que ahora con menos soporte para el navegador?), Probablemente puedas encontrar otra forma de hacerlo.
fuente
download
para sugerir un nombre como lo mencionan muchas otras respuestas .Este funciona con Firefox 43.0 (anterior no probado):
dl.js:
dl.html
Si se hace clic en el botón, se ofrece un archivo llamado hello.bin para descargar. El truco es usar Archivo en lugar de Blob .
referencia: https://developer.mozilla.org/de/docs/Web/API/File
fuente
fuente
De hecho, puede lograr esto, en Chrome y Firefox.
Pruebe la siguiente URL, descargará el código que se utilizó.
fuente