Невозможно загрузить файлы из хранилища Firebase на Linux-сервере, используя curl, дает ошибку сегментации - PullRequest
0 голосов
/ 06 октября 2019

Проблема:

Это довольно странно, что хранилище Firebase не разрешает доступ к файлам на сервере Linux

Когда я запускаю команду curl <download url>, она отвечаетэто:

{
  "error": {
    "code": 403,
    "message": "Permission denied. Could not perform this operation"
  }
}

мои правила хранения Firebase в порядке

Что я пробовал?

также, как когда я открываю URL загрузки вбраузер автоматически запускает загрузку файлов

, просто чтобы убедиться, что код моего сервера в порядке. Я выполнил тест, используя file.io файл был загружен без проблем

Пожалуйстапрокомментируйте, если вам что-то известно об этом поведении хранилища Firebase.


Запрошенные данные

это URL, который я пытаюсь использовать => https://firebasestorage.googleapis.com/v0/b/famenun-2943.appspot.com/o/App%2Ftest.zip?alt=media&token=7b9ad4bf-de7b-4bd5-aaf2-58e54923a1d7

Новая проблема

После применения предложения Робсимба этот 403 пропал, но цель все еще не достигнута !!!

Еще одна вещь, которую я забыл упомянуть, это то, что яm выполняет команду через файл sh и которая выполняется через файл phpДи заметил еще одну вещь: она выдает ошибку, называемую «ошибка сегментации»

Я гуглил ее, но не смог найти ничего неправильного в моем коде

Когда я выполняю файл sh через терминалработает нормально, но, когда я выполняю его через php-файл, он не работает

Я должен был сказать все это с первого взгляда, я ожидал, что это будет нормальная проблема, но это довольно глубоко

спасибоза комментарии и предложения :) помогите пожалуйста

Ответы [ 3 ]

2 голосов
/ 06 октября 2019

Скорее всего, вам нужно заключить URL, который вы передаете в curl, так как в нем есть специальные символы оболочки (особенно '?' И '&').

например

curl 'https://firebasestorage.googleapis.com/v0/b/[path]?alt=media&token=[gibberish]'

Без кавычек оболочка, скорее всего, отбросит все после &, включая токен авторизации, таким образом, вы получите запрещенное разрешение.

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

Когда вы создаете проект Firebase, проект GCP будет создан и связан с проектом Firebase. Это означает, что всякий раз, когда вы создаете сегмент в Firebase, у вас будет один и тот же фрагмент и все ваши данные в проекте GCP.

Зная это, я воспроизвел вашу проблему, и у меня возникла та же ошибка 403 (я заметилчто это потому, что правила аутентификации в Firebase), то я изменил правила, и это сработало.

В вашем случае вы должны установить конкретные заголовки для вашего запроса, следуя документации из Аутентификация облачного хранилища :

curl -H "Authorization: Bearer ACCESS_TOKEN" "https://www.googleapis.com/storage/v1/b/example-bucket/o"
1 голос
/ 10 октября 2019

Я повторил вашу проблему и мог загрузить файл без проблем. Это мой код:

<?php
$output = shell_exec("curl '<your_file_url>' -o <destination_file>");

Мои настройки: версия Php: 7.3 Правила хранения Firebase: чтение и запись

Можете ли вы подтвердить, что это также ваши настройки?

...