Загрузка файлов с помощью аддона Firefox - PullRequest
7 голосов
/ 12 июля 2011

Я новичок в разработке надстроек Firefox, и пока все идет хорошо, но я застрял на том, как, по сути, загрузить файл из Интернета с заданным URI и сохранить его на диск. Документация Mozilla по MDN содержит информацию о том, как загружать файлы, но раздел загрузки файлов пуст и еще не написан. К сожалению, я не нашел никакой документации, которая описывает, как это сделать.

Кто-нибудь знает соответствующую документацию о том, как это сделать?


Старый аддон Downloader для Фотоальбома Facebook использует этот вызов функции в своем оверлее JavaScript:

saveURL(images[i].replace(/\/s/g, "/n"), null, null, false, true, null);

Очевидно, что первым аргументом является URI для запроса. Функция saveURL нигде не определена, поэтому я предполагаю, что это функция API расширения. Я попробовал это в моем новом аддоне, и это работает. Однако я хотел бы знать, что означают другие аргументы.

Ответы [ 4 ]

5 голосов
/ 12 июля 2011

Стандартный способ сделать это с помощью nsIWebBrowserPersist:

var persist =
  Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"].
  createInstance(Ci.nsIWebBrowserPersist);
persist.saveURI(serverURI, null, null, null, "", targetFile);

Подробнее см. https://developer.mozilla.org/en/Code_snippets/Downloading_Files.

3 голосов
/ 12 июля 2011

На самом деле есть некоторая документация по MDN: https://developer.mozilla.org/en/Code_snippets/Downloading_Files.

1 голос
/ 04 августа 2013

Вот простой вариант копирования / вставки для тех, кто ищет быстрое решение без каких-либо дополнительных действий. Поместите его в свой main.js и измените имя файла, каталог и URL.

function DownloadFile(sLocalFileName, sRemoteFileName)
{
    var saveToDirectory = 'C:\\Users\\louis\\downloads\\';

    var chrome = require("chrome");

    var oIOService = chrome.Cc["@mozilla.org/network/io-service;1"].getService(chrome.Ci.nsIIOService)

    var oLocalFile = chrome.Cc["@mozilla.org/file/local;1"].createInstance(chrome.Ci.nsILocalFile);
    oLocalFile.initWithPath(saveToDirectory + sLocalFileName);

    var oDownloadObserver = {onDownloadComplete: function(nsIDownloader, nsresult, oFile) {console.log('download complete...')}};

    var oDownloader = chrome.Cc["@mozilla.org/network/downloader;1"].createInstance();
    oDownloader.QueryInterface(chrome.Ci.nsIDownloader);
    oDownloader.init(oDownloadObserver, oLocalFile);

    var oHttpChannel = oIOService.newChannel(sRemoteFileName, "", null);
    oHttpChannel.QueryInterface(chrome.Ci.nsIHttpChannel);
    oHttpChannel.asyncOpen(oDownloader, oLocalFile);    

}
DownloadFile("saveAsThis.mp3","http://domain.com/file.mp3");
0 голосов
/ 12 марта 2015

По состоянию на 2015 год API-интерфейсы для управления загрузками (запуск, остановка и т. Д.) Изменились с момента ответа на этот вопрос. Новые API (ссылки на документацию по MDN):

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