【问题标题】:Cannot delete Google Cloud Storage files using Firebase Functions无法使用 Firebase 函数删除 Google Cloud Storage 文件
【发布时间】:2019-05-22 22:26:05
【问题描述】:

我似乎无法使用 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"

【问题讨论】:

    标签: javascript node.js firebase google-cloud-storage google-cloud-functions


    【解决方案1】:

    const bucketname = "gs://MY_PROJECT.appspot.com/user/"+userUID;

    上面的字符串不是您的存储桶的名称。它是存储桶中某个位置的 URL。存储桶的名称看起来不像 URL,而且它没有文件路径。您的默认存储桶的名称可能只是“MY_PROJECT.appspot.com”,您可以在云控制台的存储部分中查看。

    您可能误以为存储桶是文件夹或其他东西。桶只是容器。拥有 Bucket 对象后,您构建对文件的引用。这些文件可能有路径组件,例如“/user/UID/somefile.jpg”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 2020-12-07
      • 2017-08-27
      相关资源
      最近更新 更多