追加Blob数据

45

JavaScript中是否有用于追加Blob数据的函数?我目前使用以下方法:

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

而且 BlobBuilder 函数在 Chrome 中不可用。


2
这是个很好的问题! - Tomislav Markovski
2
这基本上是你应该这样做的方式,除非你可以以某种方式将数据片段保留在数组中,然后进行单个 Blob 构建。 - Ja͢ck
谢谢你的回复,杰克。这就是我最终实现它的方式,我只是想知道是否有更聪明的解决方案,而nkron刚刚发布了一个好的方案。 - Deni Spasovski
1个回答

45

Blob对象是“不可变的”,因此在创建后无法更改。根据您最初的问题,构建一个将数据附加到现有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并不像简单。 - nkron
1
我尝试了使用MediaRecorder进行音频录制的解决方案 - 但它并不起作用 - 如果使用Blob数组,并且将其展平 - 它只使用其中一个。 - Yuval A.
@YuvalA. 你是如何解决的?我也遇到了完全相同的问题(没有使用上面的解决方案)。我正在尝试组合 BlobPart,但只取最后一个(或第一个)Blob - codenamezero
@codenamezero 你能解决这个问题吗?我正在尝试将两个 mediaRecorder Blobs 进行拼接。 - rbansal
@rbansal 我最终只是创建了一个新的 Blob,我进行了一些测试,只要你不太频繁地创建新的 Blob,性能损失几乎为零。系统似乎能够很好地处理它。只需将您的 Blob 放入 BlobPart[] 中,然后将其传递到 new Blob(yourBlobPartsArray) 中即可。 - codenamezero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接