简体   繁体   中英

Laravel 5.1 AWS S3 Storage, how to link images?

i am in the proccess of creating a "Content Management System" for a "start up company". I have a Post.php model in my project, the following code snippet is taken from the Create method:

        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;

The above code checks if there is a "display_image" file input in the request object.

If it finds a file it uploads it directly to AWS S3 storage. I want to save the link of the file in the Database, so i can link it later in my views.

Hence i use this piece of code:

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

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

I get a URL, the only problem is that whenever i visit the $post->display_image URL i get a 403 permission denied. Obviously no authentication takes place when using the URL of the image.

How to solve this? I need to be able to link all my images/files from amazon S3 to the front-end interface of the website.

You could open up those S3 URLs to public viewing, but you probably wouldn't want to. You have to pay for the outgoing bandwidth every time someone views one of those images.

You might want to check out Glide , a pretty simple-to-use image library that supports S3. Make sure to reduce the load requirements on your server and wallet by setting caching headers on the images you serve.

Alternatively, you could use a CloudFront distribution as a caching proxy in front of your S3 bucket.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM