Создайте ссылку для скачивания из Blob URL - PullRequest
9 голосов
/ 20 мая 2011

В расширении Google Chrome, над которым я работаю, файл загружается с сервера с XMLHttpRequest. Этот файл содержит некоторые двоичные данные, которые хранятся в объекте ArrayBuffer. Чтобы обеспечить возможность загрузки этого файла, я использую createObjectURL API.

function publish(data) {
  if (!window.BlobBuilder && window.WebKitBlobBuilder) {
    window.BlobBuilder = window.WebKitBlobBuilder;
  }
  var builder = new BlobBuilder();
  builder.append(data);
  var blob = builder.getBlob();
  var url = window.webkitURL.createObjectURL(blob);
  $("#output").append($("<a/>").attr({href: url}).append("Download"));

}

Работает нормально; за исключением того, что имя файла является непрозрачным UUID, как 9a8f6a0f-dd0c-4715-85dc-7379db9ce142. Есть ли способ заставить это имя файла сделать что-то более удобное для пользователя?

Ответы [ 2 ]

11 голосов
/ 12 июня 2012

Вы можете принудительно задать произвольное имя файла, установив атрибут "download" вашего якоря

см .: http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download

6 голосов
/ 20 мая 2011

Я никогда не пробовал этого раньше, но должна быть возможность создать новый объект File (который позволяет вам указать имя файла) и записать в него свой BLOB-объект.Что-то вроде:

function publish(data, filename) {

    if (!window.BlobBuilder && window.WebKitBlobBuilder) {
        window.BlobBuilder = window.WebKitBlobBuilder;
    }

    fs.root.getFile(filename, {
        create: true
    }, function (fileEntry) {

        // Create a FileWriter object for our FileEntry (log.txt).
        fileEntry.createWriter(function (fileWriter) {

            fileWriter.onwriteend = function (e) {
                console.log('Write completed.');
            };

            fileWriter.onerror = function (e) {
                console.log('Write failed: ' + e.toString());
            };

            var builder = new BlobBuilder();
            builder.append(data);
            var blob = builder.getBlob();
            fileWriter.write(blob);

        }, errorHandler);

    }, errorHandler);
}

Я думаю, это может сработать для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...