我正在拼命尝试在javascript中克隆blob而不使用外部库(例如jQuery)。
我试过JSON.parse(JSON.stringify(blob))
但没有成功。
答案 0 :(得分:6)
来自文档:
要创建包含另一个blob数据子集的Blob,请使用
slice()
方法。
所以你可以使用
var copy = blob.slice();
它也说
要从其他非blob对象和数据构造Blob,请使用Blob()构造函数。
并查看构造函数文档,表明以下内容也应该起作用:
var copy = new Blob([blob], {type: blob.type});
答案 1 :(得分:0)
请注意,接受的答案不会克隆基础数据,它会创建另一个引用。 new Blob([myBlob])
也是如此。通常这就是您想要的,因为它避免了在内存中创建文件的额外副本,这在普通文件大小上可能会很昂贵。但是,由于File
对象也是引用而不是副本,因此导致如下行为:
为避免这种情况,您需要实际克隆基础数据,您可以使用此功能进行操作。
const cloneBlob = b => new Promise((resolve, reject) => {
const r = new FileReader();
r.readAsArrayBuffer(b);
r.addEventListener('load', _ => {
resolve(new Blob([r.result], {type: b.type}));
});
r.addEventListener('error', _ => {
reject();
});
});