![](/img/trans.png)
[英]Get file's signed URL from amazon s3 using Filesystem Laravel 5.2
[英]How to get URL from amazon s3 using laravel 5.2 Storage::get() not working
我能够使用Intervention将文件保存在我的Amazon s3中,现在我需要从s3中获取图像的URL。 就像laravel 5.2文档中检索文件所示,
$contents = Storage::get('file.jpg');
但是当我尝试代码并将其转储时。 它没有任何输出。 我已经更改了存储桶中文件夹的权限。
这是我的代码:
$file = Storage::get('products/3b2f81c6-7f73-4df8-a52f-82f60f50947a/cebadge.png');
dd($file);
我安装了aws sdk,现在将尝试对其进行操作。 我已经阅读了大多数关于此的文章,但是我真的没有运气找到解决方案。 有人可以带领我走上正确的道路。 谢谢。
代码将图像保存在s3中,只需共享
$folderName = $request->input('folname')."/";
$img = Image::make($file);
$origName = $request->file('file')->getClientOriginalName();
Storage::put($s3Bucket.'/'.$directory.'/'.$folderName.'/'.$origName, $img->__toString());
好的,在花了很多时间在线阅读适用于PHP的AWS开发工具包PHP文档和文章之后,我终于了解了它的工作原理,以及基本知识。
我的问题原来是没有获取文件,而是将文件保存到s3中。
我正在使用上面的代码(请参阅上面的问题)上传文件。 这是错误的代码。 它出什么问题了? 在将其转换为字符串然后上传到s3之前,我没有将文件转换为流。 我所做的就是将其直接转换为字符串并上传。 这就是为什么当我使用storage :: get()时我什么也没得到的原因。
错误代码:
$img = Image::make($file);
$origName = $request->file('file')->getClientOriginalName();
Storage::put($s3Bucket.'/'.$directory.'/'.$folderName.'/'.$origName, $img->__toString());
还有什么不对的地方 存储桶名称,则无需指定存储桶名称,否则它将创建一个文件夹。
正确的代码:
$image = $request->file('file'); //the image
$img = Image::make($file); // using interventation
$image_normal = $img->stream(); // to stream
Storage::put($origName, $image_normal->__toString(),'public'); //to string
并使文件公开可用,只需添加第三个参数“ public”,否则它将自动将其设为私有。
把它们加起来。 您需要为网站上传和使用s3文件的步骤如下。
在AWS s3中创建您的账户,只需按照laravel 5.2文档中的说明在config \\文件夹中设置filesystems.php
将默认存储设置为s3
'默认'=>'s3',
上传图片
$origName = $request->file('file')->getClientOriginalName(); $image = $request->file('file'); $img = Image::make($file); $image_normal = $img ->stream(); Storage::put($origName, $image_normal->__toString(),'public');
获取图像的URL与下面的URL一样简单
https://s3-ap-southeast-1.amazonaws.com/mybucket/citibanko.PNG
https:// s3- [region] .amazonaws.com / [yourbucketname] /filename.PNG
另外,如果要列出存储桶中文件的名称,请使用以下代码:
$ files = Storage :: files('/'); dump($ files);
用于文件夹
$ files = Storage :: files('foldername'); dump($ files);
亚马逊s3中的子目录确实无关紧要,仅存储区和文件名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.