2016-04-05 8 views
0

アドオン用の新しいFirefox SDKの "Request"クラスを使用して、サーバーに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(); 

しかし、エラーは次のとおりです。nsresult:

[例外... "0x80520009(NS_ERROR_FILE_INVALID_PATH)[nsILocalFile.target]コンポーネントは、障害コードを返さ":「0x80520009(NS_ERROR_FILE_INVALID_PATH ) "場所:" JSフレーム::リソース://gre/modules/commonjs/toolkit/loader.js - >リソース://gre/modules/commonjs/sdk/querystring.js :: stringify/< :: line 70 "データ:いいえ]

私はいくつかのチェックを行いました:

  1. サーバが上にあり、ファイル
  2. せずに通常のGETとPOSTを受けたzipファイルが存在し、パスが

権利であるあなたはすべてのエラーを参照していますか? ありがとう

答えて

2

リクエストモジュールで行う唯一の方法は、base64でエンコードされた文字列をcontentキーに基づいて作成することです。これを使用しない場合は、BlobまたはDOMFile(​​)インスタンスなどのデータを送信できます。

しかし、SDKコードに見られるように、要求モジュールは要求に応じてdata変数を送信します(HEADまたはGET要求でない場合)。

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

data VARは、キーcontentに渡されたものでstringifyを実行することによって行われます 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エンコードを送信する必要が文字列。バイナリ文字列。それは吸う。

sdk/ioモジュールを使用してファイルをArrayBufferとして読み取り、ArrayBufferをbase64文字列またはバイナリ文字列に変換できます。

バイナリ文字列を取得する方法を示します。https://stackoverflow.com/a/16365505/1828637

関連する問題