Как изменить расположение папок для скачивания в Firefox? - PullRequest
0 голосов
/ 27 января 2012

Я разрабатываю расширение для Firefox, которое загружает картинки с текущей страницы в Facebook. Интересно, есть ли способ изменить каталог загрузки по умолчанию на X. И более предпочтительно попросить пользователя ввести его. Спасибо

Ответы [ 2 ]

1 голос
/ 31 января 2012
//give your file details in this line
downloadFile(title, url, fileType);

// Don't change anything below if you don't know what it does

function getDownloadFile(defaultString, fileType) 
{
    var nsIFilePicker = Components.interfaces.nsIFilePicker;

    var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
    fp.init(window, "Save As", nsIFilePicker.modeSave);
    try {
        var urlExt = defaultString.substr(defaultString.lastIndexOf(".")+1, 3);
        if (urlExt!=fileType) defaultString += "." + fileType
    }catch(ex){}

    fp.defaultString = defaultString;

    fp.appendFilter(fileType, "*." + fileType);
    var rv = fp.show();
    if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
      var file = fp.file;
      var path = fp.file.path;
      return file;
    }
    return null;
}
function downloadFile(title, url, fileType) 
{
    var file = getDownloadFile(title, fileType);

    var persist = Components.classes['@mozilla.org/embedding/browser/nsWebBrowserPersist;1'].createInstance(Components.interfaces.nsIWebBrowserPersist);  
    var ios = Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces.nsIIOService);  
    var uri = ios.newURI(url, null, null); 

    var target = ios.newFileURI(file) 
    var xfer = Components.classes["@mozilla.org/transfer;1"]  
                           .createInstance(Components.interfaces.nsITransfer);  
    xfer.init(uri, target, "", null, null, null, persist);  
    persist.progressListener = xfer; 
    persist.saveURI(uri, null, null, null, null, file);

}
1 голос
/ 27 января 2012

Эта информация хранится в файле настроек и может быть просмотрена в about:config. Если предпочтение browser.download.useDownloadDir установлено на true, каталог загрузки, установленный в browser.download.dir, используется автоматически. Если эта переменная установлена ​​на false, браузер спросит пользователя, где сохранить файл, с каталогом, установленным в browser.download.lastDir, первоначально выбранным в диалоговом окне.

Однако, если вы пишете расширение, вы, вероятно, не захотите использовать эти предпочтения, а просто позволить пользователю выбрать каталог для загрузки. Для этого вы должны использовать nsIFilePicker , а именно:

var filePicker = Components.classes["@mozilla.org/filepicker;1"]
                           .createInstance(Components.interfaces.nsIFilePicker);
filePicker.init(window, "Please choose a download directory", filePicker.modeGetFolder);
if (filePicker.show() == 0)
  window.alert("Directory chosen: " + filePicker.file.path);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...