【问题标题】:How to save ArrayBuffer?如何保存 ArrayBuffer?
【发布时间】:2017-05-10 18:07:51
【问题描述】:

如何将 ArrayBuffer 保存在 json 文件中?我为此使用了电子配置,但在 config.json 中我找到了“{}”。我尝试将 (code) ArrayBuffer 转换为字符串,但我无法将字符串转换为 ArrayBuffer。

put: function(key, value) {
    //value = { prop1: <ArrayBuffer>, prop2: <ArrayBuffer> }
    if (key === undefined || value === undefined || key === null || value === null)
        return;
    var prop1Str,prop2Str;
    prop1Str = this.ab2str(value.prop1);
    prop2Str = this.ab2str(value.prop2);
    var chValue = {prop1:prop1Str, prop2:prop2Str};
    config.set(key,chValue);
    console.log(value.prop1 === this.str2ab(config.get(key).prop1)); //===> FALSE
},
ab2str: function(buf) {
    return String.fromCharCode.apply(null, new Uint8Array(buf));
},
str2ab: function(str) {
    var buf = new ArrayBuffer(str.length);
    var bufView = new Uint16Array(buf);
    for (var i=0, strLen=str.length; i < strLen; i++) {
        bufView[i] = str.charCodeAt(i);
    }
    return buf;
}

【问题讨论】:

  • 为什么需要将二进制数据存储在 JSON 中?您是否正在向服务器发送 HTTP 请求?如果是这样,您最好使用二进制友好的东西,例如 multipart/form-data 而不是 JSON。
  • @mscdex 不一定是 JSON 格式。我只想在PC上保存ArrayBuffer。
  • 您的意思是将其保存到本地计算机磁盘上的文件中,还是将其保存在 浏览器 中,例如通过 LocalStorage(顺便说一句,它本身不支持二进制数据) ?
  • @mscdex 我的意思是把它保存在本地计算机的磁盘上(电子应用程序)。

标签: javascript json node.js electron


【解决方案1】:

工作片段节点 14.xx+

创建输出目录

  let rootDir = process.cwd()
  console.log("Current Directory"+ rootDir)

  let outDir = './out/';
  console.log("Out Directory"+ outDir)

  if (!fs.existsSync(outDir)){
      fs.mkdirSync(outDir);
  }else{
      console.log("Directory already exist");
  }
   
  // Save the raw file for each asset to the current working directory
  saveArrayAsFile(arrayBuffer,  outDir+ "fileName"+ new Date().getTime()+".png")

保存文件功能

const saveArrayAsFile =  (arrayBuffer, filePath)=> {
      fs.writeFile(filePath, Buffer.from(arrayBuffer), 'binary',  (err)=> {
          if (err) {
              console.log("There was an error writing the image")
          }
          else {
              console.log("Written File :" + filePath)
          }
      });
};

【讨论】:

    【解决方案2】:

    要保存到磁盘,您应该能够使用普通节点 API 将内容写入磁盘。例如:

    require('fs').writeFileSync('/path/to/saved/file', Buffer.from(myArrayBuffer));
    

    【讨论】:

      【解决方案3】:

      没有 JSON 格式的 ArrayBuffers(只有字符串、数字、布尔值、null、对象和数组),所以如果你想以 JSON 格式保存 ArrayBuffer,那么你必须用其中一种类型来表示它(可能是一个字符串或一个数字数组)。

      然后,当您读取 JSON 时,您必须将其转换回 ArrayBuffer,反转您之前所做的转换。

      【讨论】:

      • 我只想将 ArrayBuffer 保存在本地数据库或文件中。我找不到本地数据库,不要将数据存储在 JSON 中。
      • 我知道我应该将 ArrayBuffer 转换为字符串,但我无法将字符串转换为 ArrayBuffer。
      猜你喜欢
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 2014-11-21
      • 2012-08-11
      • 1970-01-01
      • 2016-03-09
      • 2014-10-31
      • 2022-07-06
      相关资源
      最近更新 更多