Laravel 5.1 AWS S3 存储,如何link 图片?

Laravel 5.1 AWS S3 Storage, how to link images?

我正在为 "start up company" 创建 "Content Management System"。我的项目中有一个 Post.php 模型,以下代码片段取自 Create 方法:

        if(Request::file('display_image') != null){
        Storage::disk('s3')->put('/app/images/blog/'.$post->slug.'.jpg', file_get_contents(Request::file('display_image')));
        $bucket = Config::get('filesystems.disks.s3.bucket');
        $s3 = Storage::disk('s3');
        $command = $s3->getDriver()->getAdapter()->getClient()->getCommand('GetObject', [
            'Bucket'                     => Config::get('filesystems.disks.s3.bucket'),
            'Key'                        => '/app/images/blog/'.$post->slug.'.jpg',
            'ResponseContentDisposition' => 'attachment;'
        ]);

        $request = $s3->getDriver()->getAdapter()->getClient()->createPresignedRequest($command, '+5 minutes');

       $image_url = (string) $request->getUri();
    $post->display_image = $image_url;

以上代码检查请求对象中是否有"display_image"文件输入。

如果它找到一个文件,它将直接上传到 AWS S3 存储。我想将文件的 link 保存在数据库中,以便稍后在我的视图中 link 它。

因此我使用了这段代码:

            $request = $s3->getDriver()->getAdapter()->getClient()->createPresignedRequest($command, '+5 minutes');

       $image_url = (string) $request->getUri();
    $post->display_image = $image_url;

我收到 URL,唯一的问题是每当我访问 $post->display_image URL 时,我都会收到 403 权限被拒绝。显然,使用图像的 URL 时不会进行身份验证。

如何解决?我需要能够 link 我所有的 images/files 从 amazon S3 到网站的前端界面。

您可以打开那些 S3 URL 以 public 查看,但您可能不想这样做。每次有人查看其中一张图片时,您都必须为传出带宽付费。

您可能想查看 Glide,这是一个支持 S3 的漂亮 simple-to-use 图片库。确保通过在您提供的图像上设置缓存 headers 来降低服务器和钱包的负载要求。

或者,您可以使用 CloudFront 分配作为 S3 存储桶前面的缓存代理。