【问题标题】:Appending Blob data追加 Blob 数据
【发布时间】:2013-04-04 22:38:46
【问题描述】:

JavaScript中是否有追加blob数据的功能 我目前使用以下方法:

var bb = new Blob(["Hello world, 2"], { type: "text/plain" });
bb = new Blob([bb, ",another data"], { type: "text/plain" });

并且BlobBuilder功能在Chrome中不可用。

【问题讨论】:

  • 这是个好问题!
  • 这基本上是你应该做的,除非你能以某种方式将数据片段保存在一个数组中,然后进行单个 Blob 构造。
  • 感谢 Jack 的回复,这就是我最终实施它的方式 我只是问是否有更智能的解决方案,nkron 刚刚发布了一个不错的解决方案。

标签: javascript blob


【解决方案1】:

Blobs 是“不可变的”,所以你不能在创建后更改它。构建一个将数据附加到现有 Blob 的新 Blob(如您在最初的问题中所写)是一个很好的解决方案。

如果您不需要在每次追加零件时都使用 Blob,则可以只跟踪零件数组。然后你可以不断地追加到数组中,然后在需要时在最后构造 Blob。

var MyBlobBuilder = function() {
  this.parts = [];
}

MyBlobBuilder.prototype.append = function(part) {
  this.parts.push(part);
  this.blob = undefined; // Invalidate the blob
};

MyBlobBuilder.prototype.getBlob = function() {
  if (!this.blob) {
    this.blob = new Blob(this.parts, { type: "text/plain" });
  }
  return this.blob;
};

var myBlobBuilder = new MyBlobBuilder();

myBlobBuilder.append("Hello world, 2");

// Other stuff ... 

myBlobBuilder.append(",another data");
var bb = myBlobBuilder.getBlob();

【讨论】:

  • pdf 文件格式(大部分)是基于文本的,因此您可以使用类似的东西来构建一个。虽然格式非常复杂,但它并不像将两个包含 pdf 数据的字符串组合在一起来组合成一个 pdf 那样简单。
  • 我用 MediaRecorder 尝试了这个音频解决方案 - 它不起作用 - 如果使用 blob 数组,并且如果展平 blob 数组 - 它只使用其中一个。
  • @YuvalA。你怎么解决的?我面临着完全相同的问题(不使用上述解决方案)。我正在尝试合并BlobPart,但只使用最后一个(或第一个)Blob
  • @codenamezero 你能解决吗?我正在尝试附加两个 mediaRecorder Blob。
  • @rbansal 我最终只是创建了一个新的Blob,我进行了一些测试,只要你不频繁地创建新的Blob,性能损失几乎没有。该系统似乎能够很好地处理它。只需将您的 Blob 放入 BlobPart[],然后将其传递到 new Blob(yourBlobPartsArray)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-17
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
相关资源
最近更新 更多