从 Firefox sdk 文件系统获取 javascript 文件对象
Get a javascript File object from Firefox sdk file system
我需要以 javascript 文件对象的形式将文件发送到服务器。如果我发送二进制数据,它只会显示为已损坏。我上周让它工作了,但最新的 firefox 更新似乎阻止了脚本 运行.
上周有效的代码:
function readLocalFiles(file) {
return new Promise(function (done, error) {
var xhr = new XMLHttpRequest();
xhr.open("GET", 'file:///' + file.path);
xhr.responseType = "blob";
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
var fileObj = xhr.response;
fileObj.name = file.name;
done(fileObj);
}
}
xhr.onerror = function () {
alert('fudge');
}
xhr.send();
});
}
我已将 "file:///" 添加到 package.json 文件的权限中以防万一。
我也在这里尝试过这个例子:
- https://developer.mozilla.org/en-US/docs/Extensions/Using_the_DOM_File_API_in_chrome_code
我可以使用 require("sdk/io/file") 获取文件二进制数据,但不知道如何将其转换为 File 对象,我在网上看到一些 post 关于将二进制文件转换为数组缓冲区并将其作为 blob 传递,例如:https://developers.google.com/web/updates/2012/06/How-to-convert-ArrayBuffer-to-and-from-String?hl=en,但文件已损坏。
此插件仅供内部使用,所以我不担心访问用户本地文件可能引起的任何安全问题。该脚本基本上循环遍历指定目录并抓取图像并将其上传到服务器。
编辑:
我刚刚发现 file:/// 调用在使用 jpm 运行 时有效,但在编译插件时无效。忽略我下面的评论,仍在尝试解决这个问题。
已找到解决方案,尽管出于安全原因不是最佳解决方案。
我的原始设置之所以有效,是因为 运行在 jpm 运行 中使用它,但在编译时它会失败。我想在 jpm 运行 模式下它允许本地文件访问,所以为了模仿编译后我将 firefox 设置 security.fileuri.strict_origin_policy 设置为 false.
只需要记得在完成后将其设置回去。我也可以尝试更新代码以使用 preferences/service api 为我打开和关闭它。
当您对文件 uri 进行 XHR 时,readyState 总是 returns 0,但它确实会加载,如此处所示 -
我需要以 javascript 文件对象的形式将文件发送到服务器。如果我发送二进制数据,它只会显示为已损坏。我上周让它工作了,但最新的 firefox 更新似乎阻止了脚本 运行.
上周有效的代码:
function readLocalFiles(file) {
return new Promise(function (done, error) {
var xhr = new XMLHttpRequest();
xhr.open("GET", 'file:///' + file.path);
xhr.responseType = "blob";
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
var fileObj = xhr.response;
fileObj.name = file.name;
done(fileObj);
}
}
xhr.onerror = function () {
alert('fudge');
}
xhr.send();
});
}
我已将 "file:///" 添加到 package.json 文件的权限中以防万一。 我也在这里尝试过这个例子: - https://developer.mozilla.org/en-US/docs/Extensions/Using_the_DOM_File_API_in_chrome_code
我可以使用 require("sdk/io/file") 获取文件二进制数据,但不知道如何将其转换为 File 对象,我在网上看到一些 post 关于将二进制文件转换为数组缓冲区并将其作为 blob 传递,例如:https://developers.google.com/web/updates/2012/06/How-to-convert-ArrayBuffer-to-and-from-String?hl=en,但文件已损坏。
此插件仅供内部使用,所以我不担心访问用户本地文件可能引起的任何安全问题。该脚本基本上循环遍历指定目录并抓取图像并将其上传到服务器。
编辑:
我刚刚发现 file:/// 调用在使用 jpm 运行 时有效,但在编译插件时无效。忽略我下面的评论,仍在尝试解决这个问题。
已找到解决方案,尽管出于安全原因不是最佳解决方案。
我的原始设置之所以有效,是因为 运行在 jpm 运行 中使用它,但在编译时它会失败。我想在 jpm 运行 模式下它允许本地文件访问,所以为了模仿编译后我将 firefox 设置 security.fileuri.strict_origin_policy 设置为 false.
只需要记得在完成后将其设置回去。我也可以尝试更新代码以使用 preferences/service api 为我打开和关闭它。
当您对文件 uri 进行 XHR 时,readyState 总是 returns 0,但它确实会加载,如此处所示 -