我似乎无法使用Firebase功能从Firebase存储中删除文件。我已经进行了将近一个星期的时间,而我得到的“最接近的”我相信是错误本身内的错误,“无法在ApiError处解析JSON响应”。
现在,我要做的是,一旦删除Firebase用户,我想从用户文件和数据中清除数据库和存储。
const admin = require('firebase-admin');
const {Storage} = require('@google-cloud/storage');
exports.deleteUserHandler = (event, context) => {
const userUID = event.uid;
const bucketname = "gs://MY_PROJECT.appspot.com/user/"+userUID;
const storage = new Storage({
projectId: "MY_PROJECT_ID",
});
return admin.database().ref('/user/' + userUID).remove().then(() => {
console.log("User " + userUID + " database removed");
return storage.bucket(bucketname).file("profilepic.jpeg").delete();
}).then(() => {
return storage.bucket(bucketname).file("smallprofilepic.jpeg").delete();
}).then(() => {
console.log("User " + userUID + " firestore removed");
});
}
该函数在应触发的情况下触发,并从实时数据库中删除数据。但是,我无法从存储中删除图像。我觉得我现在应该是最接近的,但是从功能日志中得到的错误如下。
Error: Cannot parse JSON response
at ApiError (/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/build/src/util.js:43:9)
at Util.parseHttpRespBody (/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/build/src/util.js:167:42)
at Util.handleResp (/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/build/src/util.js:116:117)
at retryRequest (/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/build/src/util.js:403:22)
at onResponse (/user_code/node_modules/@google-cloud/storage/node_modules/retry-request/index.js:200:7)
at /user_code/node_modules/@google-cloud/storage/node_modules/teeny-request/build/src/index.js:222:13
at process._tickDomainCallback (internal/process/next_tick.js:135:7)
我不知道这是什么意思。
我已将我的Google API服务代理和 App Engine默认服务帐户设置为存储管理员。
发布时我的依赖项是
"@google-cloud/storage": "^2.3.4",
"firebase-admin": "^6.4.0",
"firebase-functions": "^2.1.0"
答案 0 :(得分:0)
const bucketname =“ gs://MY_PROJECT.appspot.com/user/” + userUID;
上面的字符串不是您存储桶的名称。这是存储桶中某个位置的URL。存储桶的名称看起来不像URL,也没有文件的路径。默认存储桶的名称可能只是“ MY_PROJECT.appspot.com”,您可以在“存储”部分的“云控制台”中进行检查。
您似乎误以为存储桶是文件夹或其他东西。桶只是容器。拥有Bucket对象后,便可以建立对文件的引用。这些文件可能具有路径组件,例如“ /user/UID/somefile.jpg”。