Могут ли расширения скачивать файлы (нужно, в частности, скачивать .torrent файлы - т.е. если пользователь авторизован на сайте, то должны применяться cookies и т.п.)?

LA_ так браузер безо всяких расширений может скачивать торрент-файлы ;)

... если же имелась в виду возможность качать файлы по протоколу BitTorrent , непосредственно браузером , то  Wyzo так может :)

Wyzo - The Media Browser

Крошка Ру,
ок, похоже надо объяснить, что требуется автоматизировать:
1) я кликаю по ссылке с торрентом - браузер должен данную ссылку перехватить (как вариант - показать себя в списке возможных программ для открытия файла "Как Firefoх следует обработать этот файл?");
2) дальше этот файл должен быть автоматически скачан в какую-нибудь temp-папку;
3) затем этот файл должен быть передан другому серверу (~другому компу в сети, он на торрент-трекере не авторизован);
4) потом этот файл должен быть удален.

Могут ли расширения такое делать?

Именно так всё и работает. По крайней мере у меня. Вот только удаления торрент-файлов после их запуска нет, но это настраивается в торрент-клиенте.
Из дополнений : Normal "Open In" Dialog, чтоб фокс запоминал, какой тип файлов какой программе передавать , а то он забывчивый )))  И всё.

С каким сервером у вас все так работает? ;)
Мне надо закачанный торрент-файл передать на NAS (Synology) - чтоб уже NAS сам скачал музыку/видео/т.п.

LA_ пишет

С каким сервером у вас все так работает?

Что-то я не видел в предыдущих сообщениях упоминания сервера. :/  А  "всё так работает" у меня на ubuntu 10.04.2 ( комп и ноут)
Не уверен, что это осуществимо для NAS, но можно попробовать следующий вариант: установить FlashGot, в его настройках указать внешнюю качалку, которая будет складывать торрент-файлы в указанный каталог. Далее, в настройках торрент-клиента (в Deluge, к примеру, такое есть) активируем пункт "Автоматически добавлять .torrent из..." и указываем на каталог с сохранёнными торрент-файлами.

s_1307177157_770e32b684.png

Как-то так. Костыль конечно, но других вариантов пока не придумал.

собственно, потому я и хочу плагинрасширение для ff написать

возвращаюсь к начальному вопросу: плагинамрасширениям можно скачивать файлы из интернета и сохранять их? можно ли потом получить ссылку на данный файл в локальной сети (типа \\192.168.0.1\temp\downloaded_file.torrent)?

плагинам расширениям можно скачивать файлы из интернета и сохранять их?

LA_ ,например это делает DownThemAll!

можно ли потом получить ссылку на данный файл в локальной сети

скорее всего да :angel:

LA_ пишет

плагинам можно скачивать файлы из интернета и сохранять их?

Ну уж если расширениям можно:

Выделить код

Код:

const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
try 
{
  Cu.import("resource://gre/modules/Services.jsm");
  var srcURL="http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-aurora-l10n/firefox-6.0a2.ru.win32.zip";
  var file=Services.dirsvc.get("Desk", Ci.nsILocalFile);
  file.append(srcURL.replace(/^.*\//,""));
  if (!file.exists()) file.create(0x00,0644);
  var fURI=Services.io.newURI(srcURL,null,null);
  const nsIWBP=Ci.nsIWebBrowserPersist;
  var oPersist=Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"].createInstance(nsIWBP);
  with(nsIWBP) oPersist.persistFlags=PERSIST_FLAGS_REPLACE_EXISTING_FILES | PERSIST_FLAGS_FROM_CACHE;
  oPersist.progressListener=
  {
    onProgressChange: function(aWebProgress,aRequest,aCurSelfProgress,
                  aMaxSelfProgress,aCurTotalProgress,aMaxTotalProgress) {},
    onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus)
    {
      with(Ci.nsIWebProgressListener)
        if ((aStateFlags & STATE_STOP)==STATE_STOP)
          Services.console.logStringMessage("dowloading completed");
    }
  }
  oPersist.saveURI(fURI,null,null,null,null,file);
  Services.console.logStringMessage("downloading started.");
} catch(err){Services.console.logStringMessage(err+"\n"+err.stack);}

, то плагинам можно и подавно.

Со скачиванием файлов возник такой вопрос - например, есть ссылка

http://dl.rutracker.org/forum/dl.php?t=3667324

Как мне сохранить файл под тем именем, что отдает rutracker? (srcURL.replace(/^.*\//,"") тут, конечно, не подходит)

hydrolizer
какие преимущества скачивания методом, который вы указали, перед XMLHttpRequest?

И, если мне надо скачать файл, а потом тут же загрузить его на другой сервер - может, мне нет смысла сохранять файл в папку temp? Может, мне его в памяти сохранить (только как)?

LA_ пишет

какие преимущества скачивания методом, который вы указали, перед XMLHttpRequest?

Попробуйте XMLHttpRequest'ом принять файл с бинарными данными размером мегабайт в 100 - увидите.

hydrolizer
ок, торрент-файлы - килобайт 20, так что для меня, видимо, разницы нет.

как мне быть со вторым вопросом?
или, если уж я сохранил файл на диск, как мне его теперь загрузить на другой сервер? как прочитать содержимое файла?

LA_ пишет

как мне быть со вторым вопросом?
или, если уж я сохранил файл на диск, как мне его теперь загрузить на другой сервер? как прочитать содержимое файла?

См. здесь и здесь.

hydrolizer
а если я скачал файл вашим способом? как мне его загрузить на другой сервер?
(XMLHttpRequest мне не нравится тем, что для ff 6 код придется менять. кстати, XMLHttpRequest тоже использует кукисы браузера?)

Таак. Если использовать XMLHttpRequest:

Выделить код

Код:

// download the file first
  var req = new XMLHttpRequest();
  req.open('GET', url, false);
  req.overrideMimeType('text/plain; charset=x-user-defined');
  req.send(null);
  if (req.status != 200) return '';

  // upload the file
  req.open("POST", "http://mysite.com/upload", false);
  req.setRequestHeader("Content-Length", req.responseText.length);
  req.sendAsBinary(req.responseText); // ТАК ВЕРНО?
  alert(req.responseText);

Можно ли как-нибудь файл загрузить как поле формы с именем file?

Попробовал:

Выделить код

Код:

var formData = new FormData();
  formData.append("file", req.responseText);
  req.open("POST", "http://mysite.com/upload", false);
  req.send(formData)

но естесно не работает.

Использовал я следующий код для загрузки и сохранения файлов локально:

Выделить код

Код:

var downloadCompleted = false;

  // download the file first
  var persist = Components.classes["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"]
                  .createInstance(Components.interfaces.nsIWebBrowserPersist);
  // get OS temp folder
  var file = Components.classes["@mozilla.org/file/directory_service;1"]
                .getService(Components.interfaces.nsIProperties)
                .get("TmpD", Components.interfaces.nsIFile);
  file.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0666);

  var fURI = Services.io.newURI(url,null,null);
    const nsIWBP = Components.interfaces.nsIWebBrowserPersist;
    const flags = nsIWBP.PERSIST_FLAGS_REPLACE_EXISTING_FILES;
    persist.persistFlags = flags | nsIWBP.PERSIST_FLAGS_FROM_CACHE;

  persist.progressListener = {
    onProgressChange: function(aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress) {
      },
    onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) {
      if (aStateFlags & Components.interfaces.nsIWebProgressListener.STATE_STOP) {
         downloadCompleted = true; // file has been downloaded        
      }
    }
  }
  persist.saveURI(fURI, null, null, null, "", file);  

  var thread = Components.classes["@mozilla.org/thread-manager;1"]
                        .getService(Components.interfaces.nsIThreadManager)
                        .currentThread;
  while (!downloadCompleted) // emulate synchronous request
    thread.processNextEvent(true);

все работало, но теперь файлы с rutracker'a не скачиваются - возвращается ответ, что скачивание нужно производить со страницы rutracker. При простом клике по ссылке всё, естественно, работает.
Как исправить мой код, чтоб он был эквивалентен клику по ссылке?

LA_
При скачивании torrent-файла на сервер уходит запрос вот с такими заголовками:

handled request: http://dl.rutracker.org/forum/dl.php?t=1517791
header: Cookie: bb_data=1-17430411-fQfvxu8MATCWxpEXjqCE-1579759053-1324787984-1324787984-4280520409-1; bb_dl=1517791
header: Referer: http://rutracker.org/forum/viewtopic.php?t=1517791
header: Connection: keep-alive
header: Accept-Encoding: gzip, deflate
header: Accept-Language: en-us,en;q=0.5
header: Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
header: User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:10.0) Gecko/20100101 Firefox/10.0
header: Host: dl.rutracker.org

Судя по всему, принимающая сторона смотрит на referrer - а он у вас null. Попробуйте в saveURI задать его в виде, соответствующем url сохраняемого файла. Если не поможет - поэкспериментируйте с содержимым параметра aExtraHeaders сигнатуры метода.

Проверял через Firebug - запрос выглядит одинаково...
Тем не менее, попробовал:

Выделить код

Код:

var aReferrer = Services.io.newURI(url,null,null);
  persist.saveURI(fURI, null, aReferrer, null, "", file);

не помогло.

Если не поможет - поэкспериментируйте с содержимым параметра aExtraHeaders сигнатуры метода.

расскажите об этом чуть более подробно, пожалуйста

Друзья, помогите разобраться с закачкой файлов из интернета.
Возможно я виноват сам, в том что я скачал DM. Теперь и DM не качает и Мазила не качает. Я уже снес DM
но браузер все равно сообщает, чо "закачка передана в DM". А его ужеж то нету. Что делать? ОС Винда 7 Спасибо

Буратино пишет

А его ужеж то нету. Что делать?

Наверное плагин остался, удалите.

вернемся к обсуждаемой теме разработки -
как нужно изменить этот код, чтоб запрос ушел как POST?