【问题标题】:Download files stored in AWS S3 from Laravel Nova results in bug从 Laravel Nova 下载存储在 AWS S3 中的文件会导致错误
【发布时间】:2020-04-06 15:59:55
【问题描述】:

我们在 Laravel 应用程序中使用 Nova 包作为我们的管理后端。所有文件和图像都存储在 AWS S3 存储桶中。

尝试从 Nova 下载文件后,下载以名称 download.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(),

【问题讨论】:

    标签: laravel amazon-s3 laravel-nova


    【解决方案1】:

    如果没有看到完整的功能,很难看到任何问题,但请确保您的名称属性 $this-&gt;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 中根据this bug 更改为:

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

    【讨论】:

    • 谢谢 LobsterBaz。我将“URL”更改为“端点”,但没有看到任何变化。在这一点上,经过大量测试后,我认为这更像是配置问题而不是代码问题。
    猜你喜欢
    • 2021-10-08
    • 1970-01-01
    • 2019-09-06
    • 2017-10-19
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    相关资源
    最近更新 更多