Firebase Storage - URL для сервисов изображений
Я пытаюсь заставить Firebase Storage работать с сервисом изображений, таким как Imgix или Cloudinary. Однако URL-адреса для загрузки, предоставляемые Firebase, похоже, не работают с этими сервисами.
Например: Cloudinary говорит, что вы можете получать изображения следующим образом:
http://res.cloudinary.com/demo/image/fetch/ http://upload.wikimedia.org/wikipedia/commons/0/0c/Scarlett_Johansson_C%C3%A9sars_2014.jpg
Тем не менее, мой URL для загрузки выглядит примерно так:
Я изменил некоторые символы в приведенном выше URL-адресе, поэтому он не будет работать, так как я не хочу gazillion запросов от Stackru. :)
Есть ли что-то, что я могу сделать по-другому? Могу ли я сделать запросы прямо в хранилище?
2 ответа
Вы можете абсолютно использовать такие службы, как 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
(да, это фактически повторяет экранированный код с процентами).
Это привело бы к облачному 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/ чтобы убедиться, что ваши изображения работают.
При использовании любого из облачных 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.