Как удалить строку запроса из URL загрузки Firebase Storage - PullRequest
4 голосов
/ 17 октября 2019

Проблема:

Мне нужно иметь возможность удалить все украшения ссылок из URL-адреса загрузки, созданного для изображений в Firebase Storage. Однако, когда все оформление ссылки будет удалено, результирующая ссылка в настоящее время будет возвращать документ JSON с метаданными изображения.

Контекст:

Процесс выполняется следующим образом:

Изображение загружается в Firebase из приложения для iOS. После этого URL для загрузки затем отправляется в запросе POST на внешний сервер.

Сервер, на который отправляется URL-адрес, не принимает оформление ссылок при отправке URL-адресов изображений.

Цель:

Изменение хранилища FirebaseURL-адрес загрузки, такой как лишенный всех ссылок, выглядит следующим образом:

Примечания:

На самом деле проблема двоякая, сначала необходимо манипулировать ссылкой, чтобы удалить все декорации ссылки. Затем поведение ссылки необходимо изменить, так как для возврата изображения вам нужно? Alt = media после расширения файла, в данном случае .jpg. В настоящее время без оформления ссылки использование ссылки с желаемой структурой вернет документ метаданных в формате JSON.

Текущая структура ссылки выглядит следующим образом:

Желаемая структура ссылки:

Токен необходим для доступа к изображению в зависимости от действующих правил безопасности, но может быть проигнорированс надлежащими разрешениями на чтение. Я могу корректировать правила по мере необходимости, но мне все еще нужно иметь возможность удалить файл? Alt = media и вернуть изображение.

Ответы [ 3 ]

1 голос
/ 17 октября 2019

Вы должны рассматривать URL загрузки, который вы получаете от Firebase, как непрозрачную строку. Невозможно удалить параметры из URL-адреса загрузки, не нарушая этот URL-адрес загрузки.

Если вы хотите разрешить публичный доступ к файлам в вашей корзине с более простыми URL-адресами, рассмотрите возможность сделать объект в вашей (или даже всей вашей) корзине общедоступным .

1 голос
/ 17 октября 2019

Опираясь на ответ Фрэнка, если вы получите доступ к связанному с вами проекту Google Cloud Platform, найдете вкладку «Хранилище» и сделаете эту корзину общедоступной, вы сможете получить изображение отсюда в желаемом формате. То есть вы не будете получать доступ через Firebase

https://firebasestorage.googleapis.com/v0/b/example.appspot.com/o/[FOLDER_NAME]%[IMAGE_NAME].jpg

, а через Google Cloud Storage со ссылкой типа

https://storage.googleapis.com/[bucket_name]/[path_to_image]

Оказавшись в консоли проекта GCP, получите доступ к хранилищу с тем же именем, что и у вас в вашем проекте Firebase. Это одно и то же ведро. Затем сделайте корзину общедоступной, выполнив эти шаги . После этого вы сможете создавать свои ссылки, как указано выше, и они будут доступны без токена и без параметра alt=media. Если вы не хотите публиковать информацию для всех, вы сможете поэкспериментировать с имеющимися там разрешениями.

1 голос
/ 17 октября 2019

Вы можете разбить строку URL на две половины, используя String.componentsSeparatedByString(_ separator:)

Storage.storage().reference().child(filePath).downloadURL(completion: { (url, error) in
    let urlString = url.absoluteString
    let urlStringWithoutQueryString = urlString.componentsSeparatedByString("?").first!
})

Вызов .downloadURL на StorageReference вернет вам этот URL, но этот метод можно использовать для удаленияСтрока запроса с любого URL. String.componentsSeparatedByString(_ separator:) разбивает String на массив String с, разделяя строку по любому вхождению данного разделителя, в данном случае ?.

ПРИМЕЧАНИЕ этот методпредполагается, что ? встречается только один раз в строке URL-адреса, что, как я полагаю, имеет место для всех URL-адресов хранилища Firebase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...