我正在用Angular 6和angularfire2做一个Web应用程序。我在Firestore中的文档有一个名为fileUrl
的字段,其中包含存储中文件的链接。我正在尝试先删除文档,然后再删除文件。 (我不知道是否可以为此做一批)
this.competitionService.deleteCompetition(competition.id, competition.fileUrl)
.then(res => {
// Deleted
}, err => {
console.log(err);
});
来自主要服务
deleteCompetition(competitionId: string, fileUrl: string) {
return new Promise<any>((resolve, reject) => {
this.competitionsCollection.doc(competitionId).delete()
.then(res => {
if (fileUrl) {
this.uploadService.deleteFile(fileUrl).then(response => {
resolve(res);
}, err => {
console.log(err);
});
resolve(res);
} else {
resolve(res);
}
}, err => {
reject(err);
});
});
}
存储的另一项服务
getMetadata(url: string) {
const ref = this.storage.ref(`${config.storage_files}/${url}`);
return ref.getMetadata().toPromise();
}
async deleteFile(fileUrl: string) {
const fileMetadata: FileMetadata = await this.getMetadata(fileUrl);
return new Promise<any>((resolve, reject) => {
this.storage.ref(fileMetadata.fullPath).delete().toPromise()
.then(res => {
resolve(res);
}, err => {
reject(err);
});
});
}
FirebaseStorageError {code_:“存储/未找到对象”,message_: “ Firebase存储:对象 '文件/https:/firebasesto...4c92-3a0e-45d4-adf3-5d81900f3953'不 存在。“,serverResponse _:” {↵“错误”:{↵“代码”:404,↵
“ message”:“未找到。无法获取对象”↵}↵}“,名称_: “ FirebaseError”}
我不明白我收到的错误原因。
我的目标是在Firestore中删除文档,然后在Storage中删除文件,然后向用户显示一条消息。
答案 0 :(得分:1)
您不能使用此类文件的公共https下载URL建立对文件的引用。您需要存储中文件的路径才能建立参考。
我建议还将路径存储在文档中,以便以后删除时更容易。但是,您也可以使用Reference将下载URL转换为refFromUrl()
。