Laravel - IBM-Cloud Object Storage

Я пытаюсь настроить свое приложение Laravel для использования службы Object Storage из IBM-Cloud. Я хочу загрузить файл и получить статический общедоступный URL-адрес для каждого файла, но в настоящее время у меня возникают проблемы с доступом к файлу после загрузки.

Установленный пакет:

league/flysystem-aws-s3-v3

Создан новый поставщик услуг для хранилища bluemix, предложенный в этом посте:

How to connect Laravel 5 app with object-storage bucket?

В моем контроллере я использую следующий вызов для загрузки файла:

Storage::disk('object-storage')->put($full_name,$file);

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

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

    Storage::extend('object-storage', function($app, $config) {
        $client = S3Client::factory([
            'credentials' => [
                'key'    => $config['key'],
                'secret' => $config['secret'],
            ],
            'region' => $config['region'],
            'version' => $config['version'],
            'endpoint' => $config['endpoint'],
        ]);
        $adapter = new AwsS3Adapter($client, $config['bucket_name']);
        return new Filesystem($adapter,['ACL' => 'public-read']);
    });

Я также попытался установить видимость через вызов хранилища в контроллере:

Storage::disk('object-storage')->setVisibility($full_name,'public-read');

Затем я попытался получить доступ к файлу, чтобы прочитать видимость, используя getVisibility:

Storage::disk('object-storage')->getVisibility($full_name);

Это дает мне ошибку 404 в getObjectAcl с сообщением:

The specified key does not exist on https://bucket-name.s3.eu-gb.objectstorage.softlayer.net/sApQNtdUvJYg7YWsL8IbCe26U6EK8v.png?acl

Если я попытаюсь скопировать URL-адрес и вставить его в свой браузер, я получаю сообщение об ошибке «Доступ запрещен».

Учетные данные аутентификации, которые используются в вызовах, установлены как Manager.

Есть ли у кого-нибудь решение этой проблемы или существует ли руководство по загрузке и чтению файлов с помощью Laravel?

Некоторые вещи, которые я заметил здесь, проблема может не иметь ничего общего с laravel, поскольку все, что вы делаете, это вызываете apis .. во-вторых, эта служба IBM, похоже, поддерживается AWS, поэтому, используя как IBM, так и Laravel, вы ограничиваете, кто будет думать, что у них есть знания. Лучше, может быть, просто сказать, что невозможно получить доступ к файлу AWS после загрузки, IBM постоянно перепродает подобные вещи.

Dan Chase 24.06.2018 19:02

IBM COS доступна через S3 API, но сервис хранения определенно не от Amazon ... :)

data_henrik 24.06.2018 19:27

Я собираюсь изучить Laravel, но уверены ли вы на 100%, что корзина была создана в регионе eu-gb?

Nick Lange 26.06.2018 01:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
3
426
1

Ответы 1

Я так и сделал.

$response = $filesystem->put($new_name, file_get_contents($file), ['ACL' => 'public-read']  );

попробуй это

Storage :: disk ('объект-хранилище') -> put ($ full_name, $ file, ['ACL' => 'public-read']);

Другие вопросы по теме