Загрузка файлов, хранящихся в AWS S3 из Laravel Nova, приводит к ошибке - PullRequest
1 голос
/ 06 апреля 2020

Мы используем пакет Nova для нашего административного бэкэнда внутри нашего Laravel приложения. Все файлы и изображения хранятся в корзине AWS S3.

После попытки загрузить файл из Nova загрузка начинается с загрузки имени. json и сообщения об ошибке сервера.

Файлы правильно хранятся в S3, я могу проверить это вручную, также путь к ним внутри S3 правильно хранится в базе данных.

Вот код, который мы используем для создания поля загрузки в Nova

                ->download(function(){
                    return Storage::disk('s3')->download($this->name);
                })
                ->onlyOnDetail()

$ this-> name содержит путь внутри корзины s3.

config / filesystems . php также определено:

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

Документация Nova не помогла мне в этой проблеме. Любой вклад будет очень полезным.

ОБНОВЛЕНИЕ: Проблема была не в коде, а в конфигурации. Без изменения конфигурации следующий код помог:

Text::make('File/Document', function() {
                $linkToFile = Storage::disk('s3')->temporaryUrl($this->name, now()->addMinutes(1));
                return '<a href="' . $linkToFile . '" target="_blank">Download file</a>';
            })
                ->asHtml(),

1 Ответ

0 голосов
/ 07 апреля 2020

Трудно увидеть какую-либо проблему, не видя полной функции, но убедитесь, что ваше свойство name $this->name имеет то же значение, что и ваш "ключ" удаленного файла, как показано в вашей корзине Amazon s3.

Также, убедитесь, что ваш .env файл правильный и содержит следующее значение:

AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_access_key
AWS_DEFAULT_REGION=your_default_region
AWS_BUCKET=your_bucket_name
AWS_URL=your_url #if applicable

Надеюсь, это имеет смысл.


Редактировать: Еще одна вещь, в filesystem.php, эта строка:

  'url' => env('AWS_URL'),

была изменена в Laravel 6.x в соответствии с эта ошибка и стала:

  'endpoint' => env('AWS_URL'),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...