Если, например, вы переходите по ссылке:
data:application/octet-stream;base64,SGVsbG8=
Браузер предложит вам загрузить файл, содержащий данные, хранящиеся в виде base64 в самой гиперссылке. Есть ли способ предложить имя по умолчанию в разметке? Если нет, есть ли решение JavaScript?
data:application/pdf;name=document.pdf;base64,BASE64_DATA_ENCODED
Ответы:
Используйте
download
атрибут:Живой пример на html5-demos.appspot.com / ... .
В настоящее время работает на Chrome, Firefox, Edge, Opera и настольном Safari, но не на iOS Safari или IE11.
источник
window.location.replace
. например, если вы хотите создать данные: uri или данные, сгенерированныеwindow.URL.createObjectURL
и загрузить их в виде файла, вам нужно создать <a> и щелкнуть по нему: jsfiddle.net/flyingsheep/wpQtH (нет,$(...).click()
не работает)$('<a href="data:text/plain,Test" download="test.txt">')[0].click()
здесь работает нормально (Chrome 23) (примечание: я использовал нативныйclick
метод , а не jQuery). Демонстрация: jsfiddle.net/2zsRWChrome делает это очень просто в эти дни:
источник
Только HTML: используйте
download
атрибут:Только Javascript: вы можете сохранить любой URI данных с помощью этого кода:
Chrome, Firefox и Edge 13+ будут использовать указанное имя файла.
IE11, Edge 12 и Safari 9 (которые не поддерживают
download
атрибут ) загрузят файл со своим именем по умолчанию или просто отобразят его на новой вкладке, если это файл поддерживаемого типа: изображения, видео, аудиофайлы …источник
downloadjs
на npmdata:
URI, о котором упоминается в вопросе. Этот ответ также работает с Blobs и всем остальным, имеющим URIСогласно RFC 2397 , нет, нет.
Там также не наблюдается никаких атрибутов из<a>
элемента , который вы можете использовать либо.Однако HTML5 впоследствии ввел
download
атрибут в<a>
элемент, хотя на момент написания поддержка не была универсальной (например, поддержка MSIE отсутствует)источник
Я посмотрел немного в исходниках Firefox в netwerk / protocol / data / nsDataHandler.cpp
Обработчик данных только анализирует содержимое / тип и кодировку и проверяет, есть ли в строке «; base64»
rfc не указывает имя файла и, по крайней мере, firefox не обрабатывает имя файла для него, код генерирует случайное имя плюс «.part»
Я также проверил журнал Firefox
интересные файлы, если вы хотите посмотреть источники Mozilla:
Я думаю, что вы можете прекратить поиск решения на данный момент, потому что я подозреваю, что нет никакого :)
как отмечалось в этой теме, html5 имеет
download
атрибут, он также работает в Firefox 20 http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-hyperlink-downloadисточник
Следующий фрагмент кода Javascript работает в Chrome с использованием нового атрибута ссылок «загрузить» и имитации щелчка.
И следующий пример показывает его использование:
источник
Нет.
Вся цель в том, что это поток данных, а не файл. Источник данных не должен знать, что пользовательский агент обрабатывает его как файл ... а это не так.
источник
data:
состоит в том, чтобы переместить блок внутренних данных в формат URL, не считывая их из источника на основе протокола. Ссылка в ответе @ silex показывает, что возможность предложить предпочтительное имя для записи считается полезной, даже если она еще не реализована.data:
был специально придуман для того, чтобы позволить (небольшому) встроенному контенту отображаться в вымышленном формате URL, чтобы его можно было использовать такими вещами, как теги изображений, без отдельного HTTP-запроса. HTML говорит, что содержимоеimg src
атрибута должно быть URL, так что это то, что RFC 2397 создал. Нет «источника данных».Вы можете добавить атрибут загрузки к элементу привязки.
образец:
источник
Посмотрите на эту ссылку: http://lists.w3.org/Archives/Public/uri/2010Feb/0069.html
Quote:
Также есть некоторая информация в остальных сообщениях обсуждения.
источник
Используя сервисных работников , это наконец возможно в прямом смысле.
<a href, <img src
, window.open (url), абсолютно все, что можно сделать с «реальным» URL.Браузер теперь предложит myPrettyName.jpg, даже если пользователь откроет файл в новой вкладке и попытается сохранить его там. Это будет точно так, как если бы файл пришел с сервера.
источник
В Google Code есть небольшой обходной скрипт, который работал для меня:
http://code.google.com/p/download-data-uri/
Он добавляет форму с данными в ней, отправляет ее, а затем снова удаляет форму. Хаки, но это сделало всю работу за меня. Требуется JQuery.
Эта тема появилась в Google до кодовой страницы Google, и я подумал, что, возможно, здесь тоже есть ссылка.
источник
data:...
URI, этот сценарий создает форму для отправки его на сервер. И сервер, по-видимому, затем возвращает его обратно в виде HTTP-ответа «загрузка» (т. Е. С соответствующим заголовком Content-Disposition, указывающим имя файла).Вот версия jQuery, основанная на версии Холфа и работающая с Chrome и Firefox, тогда как его версия работает только с Chrome. Немного странно добавлять что-то в тело, чтобы сделать это, но если у кого-то есть лучший вариант, я полностью за это.
источник
$().appendTo()
variable.click(); variable.remove()
[0]
из любого «элемента jQuery» должно вернуть первый элемент DOM, который он представляет, что по сути «выводит вас из» jQuery.Это немного хакерски, но я уже был в такой же ситуации. Я динамически генерировал текстовый файл в javascript и хотел предоставить его для загрузки, кодируя его с помощью data-URI.
Это возможно при
незначительномвмешательстве крупных пользователей. Создать ссылку<a href="data:...">right-click me and select "Save Link As..." and save as "example.txt"</a>
. Как я уже сказал, это не элегантно, но работает, если вам не нужно профессиональное решение.Это может быть сделано менее болезненно, если сначала использовать flash для копирования имени в буфер обмена. Конечно, если вы позволите себе использовать Flash или Java (я думаю, что теперь все меньше и меньше поддерживает браузер?), Вы, возможно, найдете другой способ сделать это.
источник
download
чтобы предложить имя, как упоминалось во многих других ответах .Этот работает с Firefox 43.0 (старый не тестировался):
dl.js:
dl.html
Если кнопка нажата, она предлагает файл с именем hello.bin для скачивания. Хитрость заключается в том, чтобы использовать File вместо Blob .
ссылка: https://developer.mozilla.org/de/docs/Web/API/File
источник
источник
Вы действительно можете достичь этого в Chrome и FireFox.
Попробуйте следующий URL, он загрузит код, который был использован.
источник