Всем добра! Недавно прилетела интересная задачка сделать интернет-магазин для электронных товаров. Смысл в том что нужно было подключить Amazon S3 хранилище, где лежат эти самые товары.

Но прямого доступа файлам нет, так как доступ в хранилище осуществляться по API Key. Конфиги драйвера я настроил. Соответственно медиаменеджер видит файлы и позволяет ими управлять. Но ссылки которые он генерит через поле в формах "добавить файл" при переходе ругают access dained.

Встречал реализацию с проксированием Амазон, скачать файл можно было только через сайт, зарегистрированному пользователю.

Так вот есть вопрос как лучше поступить. Я примерно знаю, как можно обойтись без Амазона написав обработчик, который будет отдавать файл по определенному условию. Но как можно реализовать с Амазоном. Я даже готов финансово отблагодарить за помощь. 😀

Сложный вопрос. С Amazon достаточно трудно работать как минимум из-за их ужасной документации.

  • BlackCat ответили на это сообщение.

    reazzon Я вчера копал инфу и нашел класс для работы с Амазон, там был очень простой пример как запилить ссылку на определённое время.

    Потом покопал доки октября и выяснил что есть матоды для вставки файла, копирования и тд. В теории значит должен быть метод для получения ссылки. На октябре тоже скупая документация и приходится много додумывать самому

    Всем спасибо за помощь, нашел решение. Если в октябре есть драйвер для работы с хранилищем S3, очевидно, что должны быть методы для работы с файлами.

    К сожалению я не нашел в интернете докам по драйверу и пришлось копать файлы ядра, что бы найти зацепку. В итоге решение найдено.

    Storage::disk('s3')->temporaryUrl($pathToFile, '+10 minutes');

    Метод

    temporaryUrl($path, $timeLimit, $options = [])

    работает как с локальными файлами, так и с хранилищем Амазон. В данном случае ::disk('s3') указывает на адаптер.

    Есть еще метод

    getAwsTemporaryUrl($adapter, $pathToFile, $timeLimit, $options)

    в этом методе мы принудительно указываем адаптер, в остальном различий нет.

    Я так понимаю параметр $option мы уже берем с доков API Amazon S3. Я дальше не копал, так как мне достаточно и временной ссылки.

    Если кому интересно, то посмотреть код и остальные методы можно в файле /vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php

    Надеюсь эта информация кому-то поможет и моя бессонная ночь не прошла даром.

    • reazzon ответили на это сообщение.
    • reazzon оценил это.

      BlackCat Молодец что нашел решение)