Firefox插件点击按钮下载文件并将其发布到另一台服务器

时间:2015-04-09 06:22:20

标签: xul nsfilemanager

我访问的网站有一个简单的按钮(我不拥有该网站,也没有访问源代码)来下载文档。我正在使用下面的代码执行此操作,它似乎工作正常,但是很糟糕

目标

  • 我想下载文件

  • 将文件数据发布到其他网站

问题

  • 有时下载的文档很大,或者单击按钮后根本没有文档
    • 在同一操作系统
    • 的不同机器上无法使用相同版本的FF

以下代码

  Components.utils.import("resource://gre/modules/Downloads.jsm");
  Components.utils.import("resource://gre/modules/Task.jsm");

  window.content.location.href = "javascript:void download_document()";

  Task.spawn(function () {
    let list = yield Downloads.getList(Downloads.ALL);
    let downloads = yield list.getAll();
    setTimeout(function(d_before){
        Task.spawn(function(d_before) {
          let list = yield Downloads.getList(Downloads.ALL);
          let downloads = yield list.getAll();
          var file =  downloads[downloads.length-1];
          var parts = file.target.path.split('/');
          var document_name = parts[parts.length-1];

          // alert(document_name);
          var file = FileUtils.getFile("DfltDwnld", [document_name]);
          Components.utils.import("resource://gre/modules/NetUtil.jsm");
          NetUtil.asyncFetch(file, function(inputStream, status) {

            // alert("Fetching file");
            if (!Components.isSuccessCode(status)) {
              return;
            }
            var data =  NetUtil.readInputStreamToString(inputStream, inputStream.available());

            // alert("Reading file data");
            data = window.btoa(data);

            // alert("File data read");
            // alert(prefs.getCharPref("server_ip"));
            xmlhttp.open("POST",ht_server+"/import_document",true);
            xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xmlhttp.send("authentication_token="+prefs.getCharPref("api_key")
                +"&email="+prefs.getCharPref("email")
                +"&body="+encodeURIComponent(content.document.body.innerHTML)
                +"&document_name="+document_name
                +"&document_data="+encodeURIComponent(data));
            // alert("Finished");
          });
        }).then(null, Components.utils.reportError);
    },3000);
  }).then(null, Components.utils.reportError);

上面的代码对我的解决方案来说并不完整,但我主要担心的是它在某些机器上运行,而在其他机器上我得到了这个错误(当下载文档时)

NS_ERROR_NOT_AVAILABLE: Async version must be used nsHelperAppDlg.js:209:0
[Exception... "Component returned failure code: 0x80520001 (NS_ERROR_FILE_UNRECOGNIZED_PATH) [nsIFile.append]"  nsresult: "0x80520001 (NS_ERROR_FILE_UNRECOGNIZED_PATH)"  location: "JS frame :: resource://gre/modules/FileUtils.jsm :: FileUtils_getFile :: line 43"  data: no] Promise-backend.js:873:0
NS_ERROR_NOT_AVAILABLE: Async version must be used nsHelperAppDlg.js:209:0
[Exception... "Component returned failure code: 0x80520001 (NS_ERROR_FILE_UNRECOGNIZED_PATH) [nsIFile.append]"  nsresult: "0x80520001 (NS_ERROR_FILE_UNRECOGNIZED_PATH)"  location: "JS frame :: resource://gre/modules/FileUtils.jsm :: FileUtils_getFile :: line 43"  data: no] Promise-backend.js:873:0
A promise chain failed to handle a rejection. Did you forget to '.catch', or did you forget to 'return'?
See https://developer.mozilla.org/Mozilla/JavaScript_code_modules/Promise.jsm/Promise

不是这方面的专家,我无法解决它

有人可以提供一些建议吗?

2 个答案:

答案 0 :(得分:0)

我建议检查selenium,这是一个基于Java的网络应用程序,以帮助测试网络应用程序。它允许很多自动化,并且可以以混合方式使用,您可以将代码的一部分保留在临时文件夹中,然后将文件发布/上传到其他位置。

firefox的插件也允许在FF IDE中进行大量控制

答案 1 :(得分:0)

rlply

这适用于所有平台并发送文档名称和数据; - )