Я пытаюсь настроить приложение 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?