Я пытаюсь настроить свое приложение Laravel для использования службы Object Storage из IBM-Cloud. Я хочу загрузить файл и получить статический общедоступный URL-адрес для каждого файла, но в настоящее время у меня возникают проблемы с доступом к файлу после загрузки.
Установленный пакет:
league/flysystem-aws-s3-v3
Создан новый поставщик услуг для хранилища bluemix, предложенный в этом посте:
В моем контроллере я использую следующий вызов для загрузки файла:
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?
IBM COS доступна через S3 API, но сервис хранения определенно не от Amazon ... :)
Я собираюсь изучить Laravel, но уверены ли вы на 100%, что корзина была создана в регионе eu-gb?






Я так и сделал.
$response = $filesystem->put($new_name, file_get_contents($file), ['ACL' => 'public-read'] );
попробуй это
Storage :: disk ('объект-хранилище') -> put ($ full_name, $ file, ['ACL' => 'public-read']);
Некоторые вещи, которые я заметил здесь, проблема может не иметь ничего общего с laravel, поскольку все, что вы делаете, это вызываете apis .. во-вторых, эта служба IBM, похоже, поддерживается AWS, поэтому, используя как IBM, так и Laravel, вы ограничиваете, кто будет думать, что у них есть знания. Лучше, может быть, просто сказать, что невозможно получить доступ к файлу AWS после загрузки, IBM постоянно перепродает подобные вещи.