Расширение Chrome: Как сохранить файл на диске

Я в настоящее время создаю расширение для Google Chrome, который может сохранить все образы или ссылки на изображения на жестком диске.

Проблема, я не знаю, как сохранить файл на диске с JS или с API Расширения Google Chrome.

Вы поняли?

61
задан X-Blaster 28 January 2010 в 11:05
поделиться

3 ответа

Вы можете использовать функции файловой системы HTML5 для записи на диск с помощью Скачать API. Это единственный способ скачать файлы на диск, и он ограничен.

Вы можете взглянуть на плагин NPAPI. Другой способ сделать то, что вам нужно, просто отправьте запрос на внешний веб-сайт через XHR POST, а затем еще один запрос на получение запроса на получение файла, который будет отображаться как диалоговое окно «Сохранить файл».

Например, для моего расширения браузера Мои тусовки Я создал утилиту для загрузки фотографии из HTML5 Canvas напрямую на диск. Вы можете взглянуть на код здесь Capture_Gallery_downloader.js Код, который имеет значение:

var url = window.webkitURL || window.URL || window.mozURL || window.msURL;
var a = document.createElement('a');
a.download = 'MyHangouts-MomentCapture.jpg';
a.href = url.createObjectURL(dataURIToBlob(data.active, 'jpg'));
a.textContent = 'Click here to download!';
a.dataset.downloadurl = ['jpg', a.download, a.href].join(':');

Если вы хотите, чтобы внедрение преобразования URI в BLOB в HTML5 вот как я это сделал:

/**
 * Converts the Data Image URI to a Blob.
 *
 * @param {string} dataURI base64 data image URI.
 * @param {string} mimetype the image mimetype.
 */
var dataURIToBlob = function(dataURI, mimetype) {
  var BASE64_MARKER = ';base64,';
  var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;
  var base64 = dataURI.substring(base64Index);
  var raw = window.atob(base64);
  var rawLength = raw.length;
  var uInt8Array = new Uint8Array(rawLength);

  for (var i = 0; i < rawLength; ++i) {
    uInt8Array[i] = raw.charCodeAt(i);
  }

  var bb = new this.BlobBuilder();
  bb.append(uInt8Array.buffer);
  return bb.getBlob(mimetype);
};

Затем после того, как пользователь нажимает кнопку «Загрузить», он будет использовать «Загрузить» файл HTML5, чтобы загрузить BLOB URI в файл.

32
ответ дан 24 November 2019 в 17:24
поделиться
3767146-

Нет никаких способов, которые я не знаю, чтобы молча сохранить файлы на диск пользователя, что похоже, что вы надеетесь сделать. Я думаю, что вы можете попросить файлы, которые будут сохранены по одному (подсказывание пользователя каждый раз), используя что-то вроде:

function saveAsMe (filename)
{
document.execCommand('SaveAs',null,filename)
}

Если вы хотели только подсказать пользователю один раз, вы можете молча захватить все изображения, нажимайте на себя Пучок, затем загрузка пользователя это. Это может означать выполнение XMLHTTPREQUEST по всем файлам, заставляя их в JavaScript, загрузив их в промежуточную площадку, а затем просить пользователя, если бы они хотели бы загрузить ZIP-файл. Звучит абсурдно, я знаю.

В браузере есть локальные параметры хранения, но они только для использования разработчика, в рамках песочницы, насколько я знаю. (например, кэширование Gmail в автономном режиме.) См. Недавние объявления от Google Like этого .

5
ответ дан 24 November 2019 в 17:24
поделиться

Поскольку JavaScript Hitch-Hitch - походы на ваш компьютер с веб-страницами всего в в любом месте , было бы опасно дать ему возможность писать на ваш диск.

Это не допускается. Вы думаете, что расширение Chrome потребует взаимодействия пользователя? В противном случае это может попасть в одну категорию.

-5
ответ дан 24 November 2019 в 17:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: