2016-06-08 2 views
6

Я пытаюсь заставить Firebase Storage работать с сервисом изображения, например Imgix или Cloudinary. Однако URL-адрес загрузки, который предоставляет 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-адресе, поэтому он не будет работайте, так как я не хочу запросов gazillion от Stackoverflow. :)

Есть ли что-то, что я могу сделать по-другому? Могу ли я, возможно, сделать запросы прямо в хранилище?

ответ

7

Вы можете абсолютно использовать службу, такую ​​как Imgix или Cloudinary, с URL-адресами хранилища Firebase. Здесь проблема (как это происходит в 99% случаев) заключается в том, что URL-адрес должен быть пропущен при использовании в выборке.

Если у нас есть URL, как: 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, который выглядит как: 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

Предоставлены услуги различие в толерантности для кодирования URL, ваш пробег может отличаться, поэтому я рекомендую тестирование URL-адрес с помощью инструмента, как http://meyerweb.com/eric/tools/dencoder/, чтобы убедиться, что ваши изображения работают ,

+1

Здравствуйте. Это действительно работает для меня для Cloudinary. :) Поэтому уже отмечен как ответ. Возможно, вы могли бы помочь мне в следующем: для Imgix это пока не работает. Я просматриваю https://docs.imgix.com/setup/serving-images. Я выбираю «Источники веб-папок». Если я возьму ваш пример url и выберете домен: https://firebasestorage.googleapis.com/v0/b/fir-cloudvisiontest.appspot.com, а затем добавьте URL-адрес, например: https: // .imgix.net/images % 252Fimage.jpg% 3Falt% 3Dmedia% 26token% 3DTOKEN он должен работать правильно? Может быть, вы можете дать свои мысли, иначе я свяжусь с поддержкой. :) – Timon

+0

Не уверен - я бы предположил, что это сработает, хотя я не слишком хорошо знаком с этим. Использование метода Web Proxy и его подписание будет самым близким приближением к решению Cloudinary. В долгосрочной перспективе я надеюсь, что imgix поддерживает ведра GCS в дополнение к ведрам S3, так как эта проблема будет решена, если они это сделают :) –

+1

Спасибо за ответ. Я свяжусь с Imgix и посмотрю, смогут ли они что-нибудь сделать. :) – Timon

2

При использовании любого из облачных 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 правильно закодированы.

Смежные вопросы