如何在JavaScript中克隆文件对象?

18
如何创建一个从元素检索到的File对象的副本?
我尝试使用JSON.parse(JSON.stringify(file))
但是JSON.stringify(file)总是评估为"{}"

2
与任何其他普通对象一样 - 不是任何其他对象,而是普通对象。原因很清楚,JSON.stringify仅读取自己的可枚举属性,这已经有文档说明了。不清楚你在谈论哪个文件,但是对于浏览器文件,文件对象可能包含大小信息,如果它们不知道文件内容,则无法访问该信息。您可以使用new File创建一个新文件,但不确定是否有效。如果您有要解决的具体问题,请提供https://stackoverflow.com/help/mcve并更新问题。 - Estus Flask
2
new File([file], file.name) 运行良好。谢谢。 - displayName
3个回答

25

new File([blob], blob.name, { type: blob.type });

添加类型是很重要的。被接受的答案忽略了类型。


别忘了 lastModified。在这里查看构造函数参数:https://developer.mozilla.org/en-US/docs/Web/API/File/File。`new File([oldFile], oldFile.name, { type: oldFile.type, lastModified: oldFile.lastModified });` - undefined

5
"new File([file], file.name)" 返回文件对象 "file" 的副本。

-3
使用这个 -
var newFileObject = {...file} OR Object.assign({}, ...file)

或使用-

JSON.parse(file.toString())

6
通常以“尝试此方法”开头的答案应该作为评论发布。如果您不确定解决方案对于原帖作者在尝试之前是否有帮助,则它并不是一个真正的答案。在这种情况下,由于上面评论中提到的原因,这个方法显然行不通。 - Estus Flask

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