从Firefox sdk文件系统中获取javascript文件对象

时间:2016-02-18 00:16:35

标签: firefox-addon firefox-addon-sdk

我需要以javascript File对象的形式将文件发送到服务器。如果我发送二进制数据,它只会显示为已损坏。我上周工作了,但似乎最新的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文件的权限中。 我也试过这个例子:   - this

我可以使用require(“sdk / io / file”)获取文件二进制数据,但不知道如何将其转换为File对象,我在网上看到一些关于将二进制转换为数组缓冲区并将其作为blob传递,例如:https://developer.mozilla.org/en-US/docs/Extensions/Using_the_DOM_File_API_in_chrome_code,但文件结果已损坏。

此插件仅供内部使用,因此我不担心访问用户本地文件时可能出现的任何安全问题。该脚本基本上遍历指定的目录并抓取图像并将其上传到服务器。

修改

我刚刚发现file:///调用在使用jpm run时有效,但在编译插件时却没有。忽略我在下面的评论,仍然试图解决这个问题。

2 个答案:

答案 0 :(得分:1)

找到解决方案,但出于安全原因不是最好的。

我原来的设置是因为在jpm运行中运行它,但是在编译它时它会失败。我想在jpm运行模式下它允许本地文件访问,所以模仿编译后我将firefox设置 security.fileuri.strict_origin_policy 设置为false。

完成后只需记住将其设置回来。我也可以尝试更新代码,使用preferences/service api为我设置这个。

答案 1 :(得分:0)

当您对文件uri进行XHR时,readyState始终返回0,但它确实会加载,如此处所示 - https://stackoverflow.com/a/25585661/1828637