Загрузка Force для blob, созданного с помощью FileWriter в JavaScript
HTML5 представляет класс FileWriter. С помощью этого класса вы можете создавать Blobs. (Файл - это расширение Blob.) С помощью JavaScript вы можете создать Blob и, например, показать его с помощью dataURL.
Пример:
var bb = new BlobBuilder();
bb.append('some text')
var blob = bb.getBlob('text/plain');
var fr = new FileReader();
fr.onload = function(e) {
document.location = this.result; // voila the dataURL
}
fr.readAsDataURL(blob);
Но это не очень хорошо:) Я хочу, чтобы новый созданный (текстовый) файл был загружен. Не открывается в том же или отдельном окне.
Есть ли способ? Должно быть. Как?
(Обсуждение уже существует в группе Google Chrome)
UPDATE
API файлов изменился, потому что спецификации изменились (или что-то!?). Webkit нарушил совместимость с BlobBuilder
, теперь называемый WebKitBlobBuilder
. Тот же пример по-разному на jsFiddle
UPDATE
Создание Blobs теперь работает по-разному (не более append()
):
blob = new Blob(['some text'], {type: 'text/plain'});
Ответы
Ответ 1
Тег загрузки в сочетании с объектом Blob делает трюк (по крайней мере, в последних версиях хром). Смотрите fiddle:
var blob = new Blob(['blaaaaat'], {type: 'text/plain'});
$('a').attr("href", window.URL.createObjectURL(blob));
$('a').attr("download", "woeii.txt");
Тем не менее, он поддерживает объект Blob. Обсуждения о реализации атрибута загрузки в Firefox доступны здесь:
Изменить: Атрибут загрузки теперь поддерживается новейшими версиями firefox по состоянию на 10/3/2013
Ответ 2
Вот чистое решение 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(); // EXECUTING CLICK EVENT WILL AUTO-DOWNLOAD THE FILE