如何在javascript中克隆blob
我正在拼命尝试在javascript中克隆一个不使用外部库(如jQuery)的对象如何在javascript中克隆blob,javascript,Javascript,我正在拼命尝试在javascript中克隆一个不使用外部库(如jQuery)的对象 我尝试了JSON.parse(JSON.stringify(blob)),但没有成功。来自文档: 要创建包含另一个blob数据子集的blob,请使用slice()方法 所以你可能需要 var copy = blob.slice(); 它还说 要从其他非Blob对象和数据构造Blob,请使用Blob()构造函数 查看施工人员的文件表明,以下内容也应适用: var copy = new Blob([blob], {
我尝试了
JSON.parse(JSON.stringify(blob))
,但没有成功。来自文档:
要创建包含另一个blob数据子集的blob,请使用slice()
方法
所以你可能需要
var copy = blob.slice();
它还说
要从其他非Blob对象和数据构造Blob,请使用Blob()构造函数
查看施工人员的文件表明,以下内容也应适用:
var copy = new Blob([blob], {type: blob.type});
请注意,接受的答案不会克隆基础数据,而是创建对它的另一个引用。
新Blob([myBlob])也是如此。这通常是您想要的,因为它避免了在内存中创建文件的额外副本,而在普通文件大小下,这可能会很昂贵。但是,由于文件
对象也是引用而不是副本,因此会导致如下行为:
用户上传一个文件
您接收文件,克隆它,可能会将其显示给用户,以表明您确实拥有它
用户删除、重命名或移动原始文件
你的文件副本消失了
为了避免这种情况,您需要实际克隆底层数据,这可以通过此函数实现
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();
});
});
请详细说明“blob”。您是否尝试了链接到的文档中的建议?“要创建包含另一个blob数据子集的blob,请使用slice()方法”@FelixKling我已经添加了一个指向blob单词的链接。在我的例子中,blob是一个pdf文件,但我不认为它对这个问题有影响。。。