2016-04-05 65 views
0

我正在尋找使用來自新的Firefox SDK的「請求」類用於插件的服務器發送zip文件到服務器。這是我的代碼:使用新的SDK通過Post發送文件Firefox Addon

var Request = require("sdk/request").Request; 
var file = new FileUtils.File(pathToZipFile); 
Request({ 
    url: serverURL, 
    content: file, 
    onComplete: function (response) { 
     for (var headerName in response.headers) { 
      console.log(headerName + " : " + response.headers[headerName]); 
     } 
     console.log("Response " + response.text); 
    } 
}).post(); 

但錯誤是:

[異常... 「組件返回故障代碼:0x80520009(NS_ERROR_FILE_INVALID_PATH)nsILocalFile.target]」 nsresult:「0x80520009(NS_ERROR_FILE_INVALID_PATH )「location:」JS frame :: resource://gre/modules/commonjs/toolkit/loader.js - > resource://gre/modules/commonjs/sdk/querystring.js :: stringify/< :: line 70 「data:no]

我試圖做一些檢查和:

  1. 的服務器上,並接收正常的GET和POST沒有文件
  2. 的zip文件存在,並且該路徑是正確的

你看到任何錯誤? 非常感謝

回答

2

使用Request模塊執行此操作的唯一方法是將base64編碼字符串基於content密鑰。如果您不使用此功能,則可以發送數據,例如BlobDOMFile(​​)實例。

但是,正如我們在SDK代碼中看到的,請求模塊根據請求發送data變量(如果它不是HEAD或GET請求)。 https://github.com/mozilla/addon-sdk/blob/master/lib/sdk/request.js#L76

字符串化使得它的字符串:: https://github.com/mozilla/addon-sdk/blob/f5fab7b242121dccfa4e55ac80489899bb9f2a41/lib/sdk/querystring.js#L30

所以你要發送的base64編碼

https://github.com/mozilla/addon-sdk/blob/master/lib/sdk/request.js#L110

data變種通過運行任何東西傳遞給content關鍵stringify做串。或者是二進制字符串。這很糟糕。

您可以使用sdk/io模塊將文件讀取爲ArrayBuffer,然後將該ArrayBuffer轉換爲base64字符串或二進制字符串。

這顯示如何獲得二進制字符串:https://stackoverflow.com/a/16365505/1828637

相關問題