在使用JSON.stringify()时,在chrome 60中构建'File'失败:迭代器getter不可调用。

41

系统配置: macOS Sierra 10.12.5; chrome 60;

我正在尝试使用浏览器的File()对象将JSON数据(响应对象)下载为json文件,但当我尝试使用它时,会出现错误:

无法构造“文件”:迭代器getter不可调用。

以下是我的代码:

//`inputData` is the valid response getting from $http.get
var stringifyData = JSON.stringify(inputData);
console.log("stringifyData ", stringifyData);
var file = new File(blob, "filename.json", {type: "text/json;charset=utf-8"});
console.log("file", file);

为什么我会遇到这个错误,问题出在哪里?当我使用JSON.stringify(inputData, undefined, 4);时,就不会有错误,并且控制台会显示正确的对象。

2个回答

77

在您的情况下,File 构造函数的签名不正确,第一个参数必须是:

由 ArrayBuffer、ArrayBufferView、Blob 或 DOMString 对象组成的数组,或任何此类对象的混合。这是以 UTF-8 编码的文件内容。

https://developer.mozilla.org/zh-CN/docs/Web/API/File/File#Parameters

new File([blob], "filename.json", {type: "text/json;charset=utf-8"});

3
似乎new Blob(...)也适用。感谢明确的示例。 - Nae
你能回答这个问题吗? https://dev59.com/g77pa4cB1Zd3GeqP7dyO - Nithin Paul

1

我知道我来晚了,但我也遇到了同样的问题,所以我想发表我的函数,它可以帮助将BLOB转换为文件。谢谢。

 imageCropped(event: ImageCroppedEvent) {
    this.Files = event.file;
    let fileName = new Date().getTime() + ".jpeg";
    let filedata = new File([this.Files], fileName, {
      type: "image/jpeg",
      lastModified: Date.now()
    });
    console.log(filedata);
  }

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