我可以为我的图片在firebase存储自己创建下载url吗?



我正在使用Firebase存储,在文档中,我看到方法getDownloadURL(),但它所做的只是在URL的末尾附加一些令牌?

如果我的图片是公开的,我可以简单地使用模板文字自己创建下载链接并将其存储在Firestore中而不需要令牌吗?:

所以不用这个:

getDownloadURL(userUploadRef).then(async (downloadUrl) => {
const imageUrl = downloadUrl;
// store it to firestore

只需这样做:

const imageUrl = `https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/routinePhotos%2F${res.data.docRefId}?alt=media`;
const thumbnailUrl = `https://firebasestorage.googleapis.com/v0/b/myapp.appspot.com/o/routinePhotos%2F${res.data.docRefId}_640x360?alt=media`;
// store links in firestore

因为这些链接是基于Firestore中的文档Id,即使我更改了存储中的实际图片,我也不必更新Firestore文档中的链接,因为这些链接总是指向相同的位置。

  1. 我可以自己创建链接吗?
  2. getDownloadUrl()?的目的是什么?
  3. 如果我可以在没有它的情况下访问该文件,那么在链接末尾需要额外的令牌URL是什么?
  1. 我可以自己创建链接吗?

不,因为这个令牌是在服务器上生成的。

  1. getDownloadUrl()的目的是什么?

是获取上传文件的下载URL,包括令牌。

  1. 如果我可以在没有它的情况下访问该文件,那么在链接末尾需要额外的令牌URL是什么?

添加在URL末尾的令牌作为一种安全措施,将访问限制为只有那些知道令牌的人。没有它,您就无法访问该文件。您将得到一个permission denied error:

{
"error": {
"code": 403,
"message": "Permission denied."
}
}

编辑:

如果你想在没有令牌的情况下访问文件,那么你应该这样设置规则:

service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read; //👈
allow write: if request.auth != null;
}
}
}

最新更新