【问题标题】:How to save a text to file and read it again but save as binary in javascript如何将文本保存到文件并再次读取,但在 javascript 中另存为二进制文件
【发布时间】:2016-11-01 22:34:58
【问题描述】:

我正在使用 FileSaver.js from a SO question 从字符串构建文件保护程序

let byteChars = atob("my string");
let byteNumbers = new Array(byteChars.length);
for (var i = 0; i < byteChars.length; i++) {
  byteNumbers[i] = byteChars.charCodeAt(i);
}
let byteArray = new Uint8Array(byteNumbers);
var data:Blob = new Blob([byteArray], {type: "application/octet-stream"});
var filename:string = filename + '.myext';
saveAs(data, filename, true);

然后我必须使用 Javascript 的 FileReader 将它读回"my string"

let fr = new FileReader();
fr.onload = (e:FileReaderEvent) => {
    let result:any = e.target.result;
    //I don't know what I have to do with this type of data to get "my string" back
    };
fr.readAsBinaryString(file);

【问题讨论】:

  • 你为什么在这里对“我的字符串”进行base64解码:atob("my string");
  • 我从stackoverflow.com/a/23452051/5480251这个得到它,我不确定我是否可以消除它,但这里的“我的字符串”是 CryptoJS 为我返回的结果,它已经被加密了。跨度>
  • “但在 javascript 中另存为二进制” 这里的“二进制”是什么意思?使用Uint8ArrayBlob'.myext' 文件扩展名的目的是什么?您可以使用 data URI 将文本内容保存为文件
  • @guest271314 这意味着我不想将我的文本保存为纯文本,.myext 是文件扩展名。
  • 是否要求将文本另存为base64 字符串?

标签: javascript typescript io binary


【解决方案1】:

编辑、更新

写入文件

let byteChars = atob("my string");
let byteNumbers = new Array(byteChars.length);
for (var i = 0; i < byteChars.length; i++) {
  byteNumbers[i] = byteChars.charCodeAt(i);
}
let byteArray = new Uint8Array(byteNumbers);
var data = new Blob([byteArray], {type: "application/octet-stream"});
saveAs(data, "myfile.abc");

读取文件

<input type="file">
<script>
 var reader = new FileReader();
 reader.addEventListener("load", function(e) {
   document.body.innerHTML += "<br>" + btoa(e.target.result);
 });
  document.querySelector("input[type=file]")
  .addEventListener("change", function(e) {
     reader.readAsBinaryString(e.target.files[0])
  })
</script>

plnkrhttp://plnkr.co/edit/0KVhXnd0JpysplDLcAlC?p=preview


您可以使用TextEncoder()TextDecoder()FileReader().readAsBinaryString()

var str = "my string";
var encoder = new TextEncoder();
var encodedBytes = encoder.encode(str);
// do file save stuff
var decoder = new TextDecoder();
var decodedBytes = decoder.decode(encodedBytes);

console.log(encodedBytes, decodedBytes);

// alternatively, using `FileReader()`
var reader = new FileReader();
reader.onload = function() {
  console.log("FileReader result:", reader.result)
}
reader.readAsBinaryString(new Blob([encodedBytes]))

【讨论】:

  • 嗨,完成之后,我得到了这样的字符串:U2FsdGVkX19F/TFrAgVg1vqS1eO1UXbDjYLY,它可以转换成这样的东西ÊÀ,V˜õèeò+p¢¶ó¯£·ªÞY®Õß.吗?
  • "嗨,在这样做之后,我得到了这样的字符串:U2FsdGVkX19F/TFrAgVg1vqS1eO1UXbDjYLY,它可以转换成这样的东西吗?ÊÀ,V~õèeò+p¢¶ó¯£·ªÞY ®Õß." 什么是“like this”字符串?您是如何检索字符的?
  • 我的意思是它仍然是一个可读的字符串,而不是像这样directupload.net/file/d/4402/oju5gjbo_png.htm
  • 链接图像的字符串是从哪里检索到的?
  • 是的,我这样做了,当我保存到文件并打开它进行阅读时,我会得到类似U2FsdGVkX19F/TFrAgVg1vqS1eO1UXbDjYLY 的字符串。我的意思是字符串的类型,而不是数据本身
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2015-10-31
  • 2018-07-05
  • 2012-11-02
  • 2013-08-22
相关资源
最近更新 更多