如何解决如何解决角度Firestore中不受支持的字段值错误?
以下是用于将图像推送到火场的代码。
item.images.forEach((image) => {
this.pushImage(image,`items/${this.itemId}/images/`);
});
和
pushImage(image,basePath) {
const imgId = returnRandStr();
const route = `${basePath}${imgId}`;
const imageRef = this.angularFireStorage.ref(route);
return concat(
imageRef.put(image)
.snapshotChanges().pipe(ignoreElements()),defer(() => imageRef.getDownloadURL())
).toPromise()
}
图像对象具有以下形式
File {
lastModified: 1604278838065
lastModifiedDate: xxx
name: "image_test.jpeg"
size: 131560
type: "image/jpeg"
webkitRelativePath: ""
}
所以图像是一个数组。
但是问题是我遇到了以下错误:
vendor.js:16168错误FirebaseError:函数DocumentReference.set()调用了无效数据。不支持的字段值:自定义File对象
注意请注意,如果我将图像推送到存储而不将其存储在数组中(即,当我直接收到$ event.target.files [0]时),那么我赢了不会收到此错误消息。但是,当我将图像存储在数组中并遍历该数组并对每个图像执行推功能时,就会抛出此错误。 (似乎是存储图像文件引起了问题,但在推送之前我已经对其进行了仔细检查,它仍然是相同的File {}对象。)
请注意,即使引发了此错误,也已将图像上载到FIRESTORAGE。 &&另外,我还会收到解析后的图片下载网址。
所以我该如何防止这种异常。在将图像对象推送到消防设备之前,我已经对其进行了检查(它仍然是相同的File {}对象)。我不确定将其存储在数组中时会发生什么!!
解决方法
它说:“不支持的字段值:一个自定义File对象”。设置并添加文档时,Firebase不支持类实例对象。
要消除此错误,请执行以下操作将文件对象转换为纯js对象:
const file = new file();
docRef.set(Object.assign({},file));
在您的代码中,我认为当您调用put方法时会触发错误,因为您的图像是File对象:
...
return concat(
imageRef.put(Object.assign({},image))
.snapshotChanges().pipe(ignoreElements()),defer(() => imageRef.getDownloadURL())
).toPromise()
...
或者尝试以类实例对象作为参数在代码中找到docRef.set()或docRef.add()调用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。