Laravel - IBM-Cloud Object Storage - PullRequest
0 голосов
/ 24 июня 2018

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

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

league/flysystem-aws-s3-v3

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

Как связать приложение Laravel 5 с хранилищем объектов?

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

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 с сообщением:

Указанный ключ не существует https://bucket -name.s3.eu-gb.objectstorage.softlayer.net / sApQNtdUvJYg7YWsL8IbCe26U6EK8v.png? Acl

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

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

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

1 Ответ

0 голосов
/ 12 ноября 2018

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

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

попробуйте это

Storage :: disk ('object-storage') -> put ($ full_name, $ file, ['ACL' => 'public-read']);

...