>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Скачивание файлов http://forum.mozilla-russia.org/viewtopic.php?id=50078 |
LA_ > 04-06-2011 00:16:19 |
Могут ли расширения скачивать файлы (нужно, в частности, скачивать .torrent файлы - т.е. если пользователь авторизован на сайте, то должны применяться cookies и т.п.)? |
Крошка Ру > 04-06-2011 00:41:43 |
LA_ так браузер безо всяких расширений может скачивать торрент-файлы |
Крошка Ру > 04-06-2011 01:24:38 |
... если же имелась в виду возможность качать файлы по протоколу BitTorrent , непосредственно браузером , то Wyzo так может |
LA_ > 04-06-2011 11:25:25 |
Крошка Ру, Могут ли расширения такое делать? |
=Agasfer= > 04-06-2011 11:31:03 |
Именно так всё и работает. По крайней мере у меня. Вот только удаления торрент-файлов после их запуска нет, но это настраивается в торрент-клиенте. |
LA_ > 04-06-2011 11:55:07 |
С каким сервером у вас все так работает? |
=Agasfer= > 04-06-2011 12:44:58 |
LA_ пишет
Что-то я не видел в предыдущих сообщениях упоминания сервера. А "всё так работает" у меня на ubuntu 10.04.2 ( комп и ноут) Как-то так. Костыль конечно, но других вариантов пока не придумал. |
LA_ > 04-06-2011 16:20:29 |
собственно, потому я и хочу возвращаюсь к начальному вопросу: |
Крошка Ру > 04-06-2011 18:52:02 |
LA_ ,например это делает DownThemAll!
скорее всего да |
hydrolizer > 04-06-2011 19:31:58 |
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);} , то плагинам можно и подавно. |
LA_ > 27-07-2011 20:40:46 |
Со скачиванием файлов возник такой вопрос - например, есть ссылка
Как мне сохранить файл под тем именем, что отдает rutracker? (srcURL.replace(/^.*\//,"") тут, конечно, не подходит) |
LA_ > 28-07-2011 12:19:04 |
hydrolizer И, если мне надо скачать файл, а потом тут же загрузить его на другой сервер - может, мне нет смысла сохранять файл в папку temp? Может, мне его в памяти сохранить (только как)? |
hydrolizer > 28-07-2011 15:46:21 |
LA_ пишет
Попробуйте XMLHttpRequest'ом принять файл с бинарными данными размером мегабайт в 100 - увидите. |
LA_ > 28-07-2011 16:24:17 |
hydrolizer как мне быть со вторым вопросом? |
hydrolizer > 28-07-2011 18:01:15 |
LA_ пишет
|
LA_ > 28-07-2011 19:58:30 |
hydrolizer |
LA_ > 28-07-2011 21:14:04 |
Таак. Если использовать 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) но естесно не работает. |
LA_ > 24-12-2011 21:34:46 |
Использовал я следующий код для загрузки и сохранения файлов локально: Выделить код Код: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. При простом клике по ссылке всё, естественно, работает. |
hydrolizer > 25-12-2011 08:48:31 |
LA_
Судя по всему, принимающая сторона смотрит на referrer - а он у вас null. Попробуйте в saveURI задать его в виде, соответствующем url сохраняемого файла. Если не поможет - поэкспериментируйте с содержимым параметра aExtraHeaders сигнатуры метода. |
LA_ > 25-12-2011 11:40:44 |
Проверял через Firebug - запрос выглядит одинаково... Выделить код Код:var aReferrer = Services.io.newURI(url,null,null); persist.saveURI(fURI, null, aReferrer, null, "", file); не помогло.
расскажите об этом чуть более подробно, пожалуйста |
Буратино > 09-01-2012 02:46:35 |
Друзья, помогите разобраться с закачкой файлов из интернета. |
mserv > 09-01-2012 02:49:53 |
Буратино пишет
Наверное плагин остался, удалите. |
LA_ > 09-01-2012 11:06:23 |
вернемся к обсуждаемой теме разработки - |