Firebase功能图片下载URL问题

时间:2019-08-12 12:58:45

标签: google-cloud-functions google-cloud-storage firebase-storage

我正在使用Firebase函数制作缩略图,但是,我尝试了两种方法来获取结果图像的downloadURL,但是我都有不同的问题:

第一种方法:我使用了下面的代码

const signedUrls = await bucket.file(thumbFilePath).getSignedUrl({
  action: "read",
  expires: "03-09-2491"
});

对于这种方法,几天后,即使到期日期很长,URL也不再有效,我找不到合适的解决方案,与此同时,我找到了另一种方法,所以尝试了。

第二种方法:我使用下面的代码

 // Uploading the thumbnail than make it public to be able to access it.
await bucket.upload(tempFilePath_des, {
    destination: thumbFilePath,
    metadata: metadata
  });

 await storage
    .bucket(fileBucket)
    .file(thumbFilePath)
    .makePublic();

thumbURL =
    "https://storage.cloud.google.com/" + fileBucket + "/" + thumbFilePath;
    
    

当我使用Google Auth时,这种方法效果很好,但是当我使用电子邮件身份验证时,会引发以下错误:

  

跨源读取阻止(CORB)阻止了跨源响应   MIME类型为text / html。请参阅以获取更多详细信息。

请帮忙吗?

1 个答案:

答案 0 :(得分:0)

我发现了另一种似乎在此post

中有效的方法

上传图片时,我们需要为其提供一个UUID,或者如果需要,可以使用以下内容从文件的元数据中进行检索

const [metadata] = await storage.bucket(fileBucket).file(filePath).getMetadata();
const uuid = metadata.metadata.firebaseStorageDownloadTokens

不是我们构造URL,这是我的工作代码:

  const UUID = require('uuid/v4');

  let uuid = UUID()

  await bucket.upload(tempFilePath_des, {
    destination: thumbFilePath,
    metadata : {
      contentType: metdata.contentType,
      metadata: {
        firebaseStorageDownloadTokens: uuid
      }
    }
  });

  thumbURL =
  "https://firebasestorage.googleapis.com/v0/b/" + fileBucket + "/o/" + encodeURIComponent(thumbFilePath) + "?alt=media&token=" + uuid;