使用javascript中的chrome将字节数组保留到本地文件

时间:2014-01-20 22:48:07

标签: javascript arrays google-chrome file-upload bytearray

我需要从本地文件系统加载文件,加密并使用chrome将其保存回本地文件系统。我用--allow-file-access-from-files标志启动chrome。 这是用于加载文件,将其转换为字节数组并加密字节数组的代码:

var http = new XMLHttpRequest();
http.responseType = "arraybuffer";
http.open("GET","file.bin",false);
http.send();
var plain = Array.apply([], new Int8Array(http.response));
var encryptedByteArray = encryptFunction(plain);

此时加密数组包含预期的字节,因为我将它与用Java编写的脚本的工作版本进行了比较。 在Java应用程序中,字节数组随后通过以下内容保存到磁盘:

new BufferedOutputStream(new FileOutputStream("encryptedFromJava")).write(encryptedByteArray)

问题是在javascript中将加密的字节数组写入磁盘。我试过了:

window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.TEMPORARY, 1024*1024, function(fs) {
    fs.root.getFile('encryptedFromJavascript.bin', {create: true}, function(fileEntry) {
        fileEntry.createWriter(function(fileWriter) {    
            var blob = new Blob(encryptedByteArray);
            fileWriter.addEventListener("writeend", function() {
                location.href = fileEntry.toURL();
            }, false);
            fileWriter.write(blob);
        }, function() {});
    }, function() {});
}, function() {});

但如果我在diffencryptedFromJava.bin上执行encryptedFromJavascript.bin,则会有所不同。 encryptedByteArray具有正确的字节,我无法弄清楚如何保存它,以便与通过Java创建的加密文件没有区别。

如果我尝试使用简单数组进行编写(例如,将encryptedByteArray替换为包含{ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }的字节数组),则Java代码创建的文件包含^A^B^C^D^E^F^G^H,而javascript创建的文件包含12345678 {1}}。 在java中创建的文件也是application/octet-stream,在javascript中创建的文件是plain/text。使用Blob初始化{type: 'application/octet-stream'}对象似乎没有任何区别。

我很欣赏这很可能不是实现任务的最佳方式,但我想了解是否有可能以与Java相同的格式编写文件。

0 个答案:

没有答案