使用新的 SDK Firefox Addon 通过 Post 发送文件
Send file via Post using new SDK Firefox Addon
我正在搜索使用新的 Firefox SDK for addons 中的 "Request" class 将 zip 文件发送到服务器。这是我的代码:
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();
但是错误是:
[Exception... "Component returned failure code: 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]
我已尝试进行一些检查并且:
- 服务器开启并接收正常的 GET 和 POST 没有文件
- zip 文件存在且路径正确
您看到任何错误了吗?
非常感谢
使用 Request 模块完成此操作的唯一方法是将 base64 编码字符串作为 content
键的基础。如果你不使用它,那么你可以发送数据,例如 Blob
或 DOMFile
(new File()
) 实例。
但是正如我们在 SDK 代码中看到的那样,请求模块根据请求发送 data
变量(如果它不是 HEAD 或 GET 请求)。
https://github.com/mozilla/addon-sdk/blob/master/lib/sdk/request.js#L110
data
变量由 运行 stringify
对传递给 content
键的任何内容进行生成:
https://github.com/mozilla/addon-sdk/blob/master/lib/sdk/request.js#L76
Stringify 使它成为一个字符串:
https://github.com/mozilla/addon-sdk/blob/f5fab7b242121dccfa4e55ac80489899bb9f2a41/lib/sdk/querystring.js#L30
所以你必须发送base64编码的字符串。或者二进制字符串。太烂了。
您可以使用 sdk/io
模块将文件读取为 ArrayBuffer
,然后将 ArrayBuffer
转换为 base64 字符串或二进制字符串。
这显示了如何获取二进制字符串:
我正在搜索使用新的 Firefox SDK for addons 中的 "Request" class 将 zip 文件发送到服务器。这是我的代码:
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();
但是错误是:
[Exception... "Component returned failure code: 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]
我已尝试进行一些检查并且:
- 服务器开启并接收正常的 GET 和 POST 没有文件
- zip 文件存在且路径正确
您看到任何错误了吗? 非常感谢
使用 Request 模块完成此操作的唯一方法是将 base64 编码字符串作为 content
键的基础。如果你不使用它,那么你可以发送数据,例如 Blob
或 DOMFile
(new File()
) 实例。
但是正如我们在 SDK 代码中看到的那样,请求模块根据请求发送 data
变量(如果它不是 HEAD 或 GET 请求)。
https://github.com/mozilla/addon-sdk/blob/master/lib/sdk/request.js#L110
data
变量由 运行 stringify
对传递给 content
键的任何内容进行生成:
https://github.com/mozilla/addon-sdk/blob/master/lib/sdk/request.js#L76
Stringify 使它成为一个字符串: https://github.com/mozilla/addon-sdk/blob/f5fab7b242121dccfa4e55ac80489899bb9f2a41/lib/sdk/querystring.js#L30
所以你必须发送base64编码的字符串。或者二进制字符串。太烂了。
您可以使用 sdk/io
模块将文件读取为 ArrayBuffer
,然后将 ArrayBuffer
转换为 base64 字符串或二进制字符串。
这显示了如何获取二进制字符串: