通过Firebase存储上传图片,任何人都可以通过公共链接访问

时间:2016-10-21 11:15:18

标签: ios firebase firebase-storage

每当我将图片上传到 Firebase存储空间时,该文件只能通过" 下载链接"进行访问。

如果我希望任何人访问此文件怎么办?

如果我转到 Google平台存储并输入Firebase使用的相同存储桶,我可以看到"公共链接"未经检查。

如何在上传照片时自动检查此内容?

此类操作可以通过 Google云端存储API 完成,但通过 Firebase 似乎无法做到这一点。

此外,通过 Firebase 上传的所有图片都有Content-Type of "application/octet-stream"

由于我上传了一张图片,我希望这可以是" image / jpeg "或" image / png "。有没有办法改变元数据?

更新:我之所以这么说是因为如果用Instagram创建一个类似数千张图片的应用程序。为每个正在获取的图像请求下载链接是不必要的,因为问题中的图像应该已经默认公开。 Firebase文件上传阻止了这一点,每个用户必须为每个图像发出一个请求(每个应用程序启动时可能会有大量图像)。例如,Firebase Flame订阅计划每月下载/上传次数限制为100,000次。这使得创建具有数千个用户的图像馈送是不现实的,每个用户具有数千个图像请求。 文件应该可以选择在上传过程中创建公共链接,就像Google云端存储API本身一样。

1 个答案:

答案 0 :(得分:3)

没有配置可自动检查Google Cloud Storage的公共访问复选框,以查找通过Firebase存储上传的文件。

也就是说,您可以编写一个Google云端功能,该功能会在文件上传时触发,然后更改文件的属性,具体而言,您需要change the object ACLs to be publicRead

但是,由于Firebase为您生成的下载网址已经公开可读,因此我不确定您通过选中此框获得了什么。是否存在您正在寻找的特定用例,仅通过共享下载URL无法实现?

在问题的第二部分,请查看我们文档的File Metadata部分,其中介绍了如何设置文件的内容类型:

// Create file metadata to update
FIRStorageMetadata *newMetadata = [[FIRStorageMetadata alloc] init];
newMetadata.contentType = @"image/jpeg";

// Update metadata properties
[myRef updateMetadata:newMetadata completion:^(FIRStorageMetadata *metadata, NSError *error){
  if (error != nil) {
    // Uh-oh, an error occurred!
  } else {
    // Updated metadata for 'images/forest.jpg' is returned
  }
}];

Metadata can on added on upload as well,因此无需第二次请求。