Firebase Storage: безопасный способ получить относительный путь к файлу? (Хранение файла HTML) - PullRequest
1 голос
/ 05 марта 2019

Здравствуйте, StackOverflow и сообщество Firebase!

Я пытаюсь добиться чего-то, что, вероятно, не предназначено для Firebase: я хочу хранить HTML-папки (в моем случае, рекламные баннеры) в Firebase Storage.1004 * Мой вопрос: Как сохранить относительный путь от моего HTML-файла к связанным JS-файлам и файлам изображений .

Чтобы эти файлы легко могли найти друг друга:

/ путь / к / моей / папке / index.html

/ путь / к / моей / папке / main.js

/ путь / к / моей / папке /picture.jpg

<html>
...
<script src="main.js">
...
</html>
document.onload = function() {
    myImage.src = 'picture.jpg'
}

Эти относительные URL не будут работать, если я сохраню все файлы в Firebase Storage и получу к ним доступ через их DownloadURL, выглядящий как https://firebasestorage.googleapis.com/v0/b/my-project.appspot.com/o/my_folder_300x250%2Findex.html?alt=media&token=12a123a1-1234-1a1a-1234-a1ab123456a1,

Я могу сделать файлы доступными без маркера, открыв правила безопасности Firebase, но относительный путь все еще не работает из-за параметров URL и пути к папке.

Мне также удалось сделать этоработать над другим проектом , создав Google CloudСкладское ведро общедоступное .Я могу получить доступ к файлам и сохранить относительный путь, используя URL-адрес, например: https://my-project.appspot.com.storage.googleapis.com/path/to/my/folder/my_folder_300x250/index.html.Это прекрасно работает, но имеет основных недостатков безопасности , которые я хочу предотвратить, например, перечисление всех файлов в корзине ?


Я пытался сохранить свои баннеры в виде zip-файлов, разархивироватьих на внешней стороне и воссоздайте структуру папок в браузере с помощью API-интерфейса FileSystem.Но я ограничен Chrome.


Я также мог бы попытаться заменить все URL-адреса в моих файлах HTML, JS и CSS, но это не похоже на хорошее решение.

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Я нашел довольно простое решение:

В Google Cloud Console я создал новую роль, у которой есть доступ, но нет доступа к списку, и применил ее к allUsers со следующими разрешениями.

resourcemanager.projects.get

storage.objects.get

Сейчас это решит мои проблемы, и я буду продолжать получать доступ к данным по ссылкамкак https://my-project.appspot.com.storage.googleapis.com/path/to/my/folder/my_folder_300x250/index.html вместо downloadURL базы FireBase ().

0 голосов
/ 05 марта 2019

Firebase Storage построен на облачном хранилище, которое на самом деле не имеет каталогов, а представляет собой простое пространство имен. Каталоги эмулируются с помощью соглашения об именах объектов хранилища: имена могут содержать символ /, а размещение пути «каталог» в начале имени объекта делает этот объект находящимся в этом «каталоге». Увидеть Как работают подкаталоги .

Таким образом, ваше единственное решение (если вы хотите сохранить файлы независимо) - это обработать все ссылки, сделать абсолютные "пути" и присвоить файлам имена соответственно. Как вы заметили, вам, вероятно, также необходимо учесть все параметры запроса URL.

...