Принудительная загрузка URL «data: text / plain» - PullRequest
11 голосов
/ 24 июня 2011

Мне было интересно, можно ли заставить браузер (по крайней мере, Chrome) загружать data:text/plain URL.

Chrome загружает двоичные URL-адреса (например, data:application/zip;base64,...), но не загружает файлы, которые можно просматривать в браузере (например, текстовые файлы).

Я уже безуспешно пытался сделать следующее:

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

Но, похоже, я не могу добавить такие заголовки.

Есть ли способ заставить Chrome загружать URL data:text/plain,...?

Ответы [ 5 ]

14 голосов
/ 27 июля 2012

На данный момент стало возможным использовать <a download> в Chrome. Используя dispatchEvent, вы можете в любое время загрузить любую строку в виде файла (даже с пользовательским именем файла). Вот полезная функция, чтобы использовать это:

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);
};

Использование:

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

Он использует jQuery и префикс webkit, но их можно избежать.

7 голосов
/ 29 ноября 2013
Try this:
<a download="file_downloaded_via_data_URL.txt"
href="data:text/plain;base64,SGVsbG8sIHdvcmxkISBJJ20gZG93bmxvYWRlZCB2aWEgImRhdGE6dGV4dC9wbGFpbjsuLi4iIFVSTCB1c2luZyA8YSBkb3dubG9hZD0iZmlsZV9uYW1lIi4uLj4uDQpNeSBiaXJ0aHBsYWNlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzY0Njg1MTcvDQoNCk1vcmUgYWJvdXQ6DQpodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sL2xpbmtzLmh0bWwjYXR0ci1oeXBlcmxpbmstZG93bmxvYWQNCmh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWwvbGlua3MuaHRtbCNkb3dubG9hZGluZy1yZXNvdXJjZXMNCg0KQnJvd3NlciBzdXBwb3J0OiBodHRwOi8vY2FuaXVzZS5jb20vZG93bmxvYWQ=">
    Download text file
</a>

Используется атрибут HTML5 download="filename.ext".(JS не требуется:)

Подробнее: http://www.w3.org/TR/html/links.html#downloading-resources

Поддержка браузера может быть проверена на http://caniuse.com/download

(На данный момент, 2013, ни IE, ни Safariподдержка)

Я думаю, вы можете сделать запасной вариант для не поддерживающих браузеров: используйте JS, чтобы изменить значение href="..." на URL вашего серверного скрипта (который вернет содержимое файла с соответствующим заголовком HTTP Content-disposition: attachment;filename=filename.txt).

1 голос
/ 25 июня 2011

Я отправил данные на сервер, который отправил их обратно со следующим заголовком HTTP:

Content-disposition: attachment;filename=test.txt

Мне это не нравится, но работает довольно хорошо.

0 голосов
/ 19 июня 2019

Вот чистое решение Javascript для создания текстового блоба и загрузки в виде текстового файла

var fileContent = 'This is sample text file';
var fileName = 'sampleFile.txt';

const blob = new Blob([fileContent], { type: 'text/plain' });
const a = document.createElement('a');
a.setAttribute('download', fileName);
a.setAttribute('href', window.URL.createObjectURL(blob));
a.click();
0 голосов
/ 21 февраля 2017

Это работает как ад ...

<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>
...