如何使用Javascript重新创建原始文件?

如何使用Javascript重新创建原始文件?,javascript,Javascript,正在开发基于Javascript的文件加密程序。它适用于文本文件,但我正在尝试处理其他数据(图像等),而解密的文件不匹配。在我的程序中,我使用以下代码读取用户提供的文件: let reader = new FileReader(); let file = UI.file.input.files[0]; reader.readAsText(file, 'UTF-8'); 然后,读取器将其添加到包含其他信息(如日期和文件名)的Javascript对象中。然后,使用JSON.stringify()将

正在开发基于Javascript的文件加密程序。它适用于文本文件,但我正在尝试处理其他数据(图像等),而解密的文件不匹配。在我的程序中,我使用以下代码读取用户提供的文件:

let reader = new FileReader();
let file = UI.file.input.files[0];
reader.readAsText(file, 'UTF-8');
然后,读取器将其添加到包含其他信息(如日期和文件名)的Javascript对象中。然后,使用JSON.stringify()将其字符串化并加密。加密完成后,文件将保存为不同的文件格式,其中包含加密的JSON。其代码为:

let message = // ENCRYPTED FILE STRING
let file = new Blob([message], {
    type: 'text/plain'
});
let url = URL.createObjectURL(file);
然后url被附加到页面上的链接元素。一切都很好

要对其进行解密,该文件再次由用户提供,并通过上面使用的相同读取器运行。它被成功解密,结果字符串再次使用JSON放入对象中到目前为止,它的工作原理与预期完全相同。如果我解密的是一个文本文件,那么它可以正常工作,但是如果我解密的是一个图像文件,那么一切都会变糟。

要保存解密的文件,我使用以下代码:

let message = // DECRYPTED DATA CONVERTED TO AN OBJECT
let fileName = message.name;
let fileType = message.type;
let file = new Blob([message.data], {
    type: fileType
});
let url = URL.createObjectURL(file);
原始文件和原始文件类型都是在文件加密并添加到包含文件数据的对象之前从文件中提取的。正如我所说,加密或解密过程没有问题。我已经使用了一个十六进制查看器来检查,输入加密过程的字符串与输出的字符串相同。我猜这个问题在我最后一段代码中的某个地方


我最好的猜测是与编码有关,尽管我不确定具体是什么。任何帮助都将不胜感激。

您可以使用并剥离
数据://*;base64,
从字符串中删除。然后,您将有一个base64编码的字符串,可以将其放入JSON。

好吧,
.readAsText(文件“UTF-8”)
不适用于图像。UTF-8专门用于文本。如果你在读二进制数据,比如图像,你不应该把它解码成文本。这就是我的想法。那么,我需要使用什么来将数据作为二进制文件提取出来,在添加到JSON时仍然可以进行字符串化呢?最终采用了类似的方法。将文件作为数组缓冲区读取,然后转换为base64。第一次读取时,我需要的文件数据不是用base64编码的,这样我就可以进行文件有效性测试。我还想建议类似于
FileReader.readAsBinaryString()