2016-06-08 113 views
6

我试图让Firebase存储使用图像服务,如ImgixCloudinary。但是,Firebase提供的下载网址似乎不适用于这些服务。Firebase存储 - 图像服务的URL

例如:Cloudinary说,你可以这样获取的图像:

http://res.cloudinary.com/demo/image/fetch/http://upload.wikimedia.org/wikipedia/commons/0/0c/Scarlett_Johansson_C%C3%A9sars_2014.jpg

然而,我的下载URL看起来更像是这样的:

https://firebasestorage.googleapis.com/v0/b/project-503247351211329470.appspot.com/changedsoitdoesnotwork/o/O8Hv4nKOyGgcCyOLoVLH7cQw48y2%2Fimages%2F1.jpeg?alt=media&token=28eabf76-f85b-45aa-das3-fd945729d7c2

我改变了上面的url中的一些字符,所以它不会因为我不想从Stackoverflow发出巨大的请求。 :)

有什么我可以做不同吗?我可以直接向存储桶发出请求吗?

回答

7

您可以绝对使用像Imgix或Cloudinary这样的服务与Firebase存储网址 - 这里的问题(99%的情况是这样的),这个网址在抓取中使用时需要百分比转义。

如果我们有一个像网址:https://firebasestorage.googleapis.com/v0/b/fir-cloudvisiontest.appspot.com/o/images%2Fimage.jpg?alt=media&token=TOKEN

这将需要逃到类似:https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Ffir-cloudvisiontest.appspot.com%2Fo%2Fimages%252Fimage.jpg%3Falt%3Dmedia%26token%3D61d35caf-b209-485f-8248-a3c2aa717468(是的,它实际上重新越狱逃脱的任何百分比编码)。

这将导致它看起来像一个Cloudinary URL:在容忍URL编码http://res.cloudinary.com/<your-project>/image/fetch/https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Ffir-cloudvisiontest.appspot.com%2Fo%2Fimages%252Fimage.jpg%3Falt%3Dmedia%26token%3DTOKEN

考虑到服务的差异,你的里程可能会有所不同,所以我建议有喜欢http://meyerweb.com/eric/tools/dencoder/工具测试网址,以验证您的影像工作。

+1

你好。这对Cloudinary来说确实很有用。 :)因此已经标记为答案。也许你可以帮我解决以下问题:对于Imgix,它还没有工作。我正在查看https://docs.imgix.com/setup/serving-images。我选择“Web文件夹来源”。如果我以您的示例网址并选择一个域名:https://firebasestorage.googleapis.com/v0/b/fir-cloudvisiontest.appspot.com,然后添加如下URL:https:// .imgix.net/images %252Fimage.jpg%3Falt%3Dmedia%26token%3DTOKEN它应该正确吗?也许你可以提出你的想法,否则我会联系支持。 :) – Timon

+0

不知道 - 我会认为它会工作,但我不太熟悉它。使用Web代理方法并对它进行签名将与Cloudinary解决方案最接近。长期来看,我希望imgix除了支持S3存储桶之外还支持GCS存储桶,因为如果他们这样做,这个问题将得到解决:) –

+1

感谢您的回复。我会联系Imgix,看看他们是否可以对此做任何事情。 :) – Timon

2

使用任何cloudinary SDK时,您可以使用url()方法创建抓取URL。以下示例使用JavaScript SDK

var cl = cloudinary.Cloudinary.new({cloud_name: "<your cloud>"}); 
var storageRef = firebase.storage().ref(); 

storageRef.child('images/image.jpg').getDownloadURL().then(function(url) { 
    var cloudinary_url = cl.url(url, {type: "fetch"}); 
    // Do something with the URL... 
    console.log(cloudinary_url); 
} 

这将确保该URL已正确编码。