以下是将图像推送到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((调用。