2016-04-05 19 views
0

Addons için yeni Firefox SDK'dan "İstek" sınıfını kullanarak bir sunucuya zip dosyası göndermek için arıyorum. Bu benim kodudur:Yeni SDK Firefox Ekleme kullanarak dosyaya dosya gönder 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(); 

Ama hatadır: nsresult:

[İstisna ... "0x80520009 (NS_ERROR_FILE_INVALID_PATH) [nsILocalFile.target] Bileşeni döndürülen hata kodu": "0x80520009 (NS_ERROR_FILE_INVALID_PATH "location:" JS frame :: resource: //gre/modules/commonjs/toolkit/loader.js -> kaynak: //gre/modules/commonjs/sdk/querystring.js :: stringify/< :: satır 70 "veri: hayır"

Bazı çekler yapmaya çalıştım:

  1. sunucu üzerinde ve zip dosyası mevcut olduğu dosyaların
  2. olmadan normal bir GET ve POST alır ve yol

Herhangi bir hata görüyor musunuz haklı? Çok teşekkürler

cevap

2

İstek modülüyle bunu yapmanın tek yolu, base64 kodlu bir dizeyi content anahtarına dayandırmaktır. Bunu kullanmazsanız, Blob veya DOMFile (new File()) örneği gibi verileri gönderebilirsiniz.

Ancak, SDK kodunda gördüğümüz gibi, istek modülü data değişkenini istek üzerine gönderir (eğer bir HEAD veya GET isteği değilse). https://github.com/mozilla/addon-sdk/blob/f5fab7b242121dccfa4e55ac80489899bb9f2a41/lib/sdk/querystring.js#L30

Yani kodlanmış base64 göndermek zorunda: https://github.com/mozilla/addon-sdk/blob/master/lib/sdk/request.js#L76

stringify bunu bir dize yapar:

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

data var content anahtar geçirilen şey üzerinde stringify çalıştırarak yapılır dize. Ya da ikili bir dize. Hangi berbat.

Dosyayı ArrayBuffer olarak okumak için sdk/io modülünü kullanabilir ve ardından bu ArrayBuffer'u bir base64 dizesi veya ikili dizgeye dönüştürebilirsiniz.

Bu, ikili bir dizenin nasıl alınacağını gösterir: https://stackoverflow.com/a/16365505/1828637

İlgili konular