Загрузка в AWS s3 bucket в Laravel 5.8 дает мне сообщение «Ошибка при получении учетных данных с сервера метаданных профиля экземпляра» - PullRequest
0 голосов
/ 08 мая 2019

У меня есть приложение Laravel 5.8, которое я пытаюсь настроить, чтобы мои загрузки загружались в корзину Amazon s3, но каждый раз, когда я пытаюсь сохранить сообщение с прикрепленным изображением, я получаю сообщение об ошибке Error retrieving credentials from the instance profile metadata server. (cURL error 28: (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)).В Интернете есть много сообщений об этом, но ни одна не смогла помочь мне решить мою проблему.Я использую Valet в моем местном окружении, если это поможет.У меня также установлено "league/flysystem-aws-s3-v3": "^1.0", в моих зависимостях.Я получаю ту же ошибку при использовании тинкера.Спасибо.

filesystems.php

...
's3' => [
    'driver' => 's3',
    'version' => 'latest',
    'credentials' => array(
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
    ),
    'region' => env('AWS_DEFAULT_REGION'),
    'bucket' => env('AWS_BUCKET'),
],
...

.env

...
    AWS_ACCESS_KEY_ID=ASTRINGOFNUMBERSANDLETTERS
    AWS_SECRET_ACCESS_KEY=anotherstrngofnumbersandletters
    AWS_DEFAULT_REGION=us-west-1
    AWS_BUCKET=bucket-name
...

PostController.php

...
if ($request->has('photo')) {
    // Get image file
    $image = $request->file('photo');
    // Make a image name based on user name and current timestamp
    $name = Str::slug($request->input('user_id')).time();
    // Define folder path
    $folder = '/uploads/posts/' . $user_id . '/';
    // Make a file path where image will be stored [ folder path + file name + file extension]
    $filePath = $folder . $name. '.' . $image->getClientOriginalExtension();
    // Upload image
    $this->uploadOne($image, $folder, 's3', $name);
    // Set user profile image path in database to filePath
    $post->photo = $filePath;
}
...

1 Ответ

0 голосов
/ 08 мая 2019

Вы должны проверить, какую версию AWS PHP SDK он на самом деле использует, как если бы она была меньше, чем версия 3. Я считаю (точно не знаю, какая версия это изменила), тогда массив учетных данных не требуется, и вы просто передаете ключ и секрет в соответствии с областью и значениями корзины.

например, вот так:

...
's3' => [
    'driver' => 's3',
    'version' => 'latest',
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_DEFAULT_REGION'),
    'bucket' => env('AWS_BUCKET'),
],
...

Вам также следует посмотреть, как копировать .aws / credentials в домашний каталог веб-сервера, чтобы проверить, не является ли это проблемой с правами доступа пользователя www, имеющего проблемы с чтением файла. Хотя это не очень хорошая идея как постоянное решение, и вам лучше всего использовать хранилище параметров для хранения значений и доступа к ним таким образом. Вам нужно обновить разрешения роли, чтобы разрешить доступ к ней, но это гораздо более безопасный способ настройки вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...