如何修复angular firestore中不支持的字段值错误



以下是将图像推送到fire存储的代码。

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:116168错误FirebaseError:Function DocumentReference.set((调用时使用了无效数据。不支持的字段值:自定义文件对象

在此处输入图像描述

注意请注意,如果我将图像推送到存储器,而不将其存储在阵列中(即,当我直接收到$event.target.files[0]时(,那么我将不会收到此错误消息。但是,当我将图像存储在数组中,并在数组中循环并对每个图像执行推送功能时,就会抛出此错误。(似乎是存储图像文件导致了问题,但在推送之前我已经仔细检查过了,它仍然是同一个file{}对象。(

注意,即使抛出了这个错误,图像也会被上传到FIRESTORAGE&此外,我收到了解析后的图像下载网址。

那么我该如何防止这种异常。在将图像对象推送到fire存储之前,我已经检查过它(它仍然是相同的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((调用。

最新更新