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 存储桶前面的缓存代理。
我正在为 "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 存储桶前面的缓存代理。