繁体   English   中英

如何使用laravel 5.2 Storage从Amazon S3获取URL :: get()不起作用

[英]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文件的步骤如下。

  1. 在AWS s3中创建您的账户,只需按照laravel 5.2文档中的说明在config \\文件夹中设置filesystems.php

  2. 将默认存储设置为s3

'默认'=>'s3',

  1. 上传图片

     $origName = $request->file('file')->getClientOriginalName(); $image = $request->file('file'); $img = Image::make($file); $image_normal = $img ->stream(); Storage::put($origName, $image_normal->__toString(),'public'); 
  2. 获取图像的URL与下面的URL一样简单

    https://s3-ap-southeast-1.amazonaws.com/mybucket/citibanko.PNG

    https:// s3- [region] .amazonaws.com / [yourbucketname] /filename.PNG

  3. 另外,如果要列出存储桶中文件的名称,请使用以下代码:

    $ files = Storage :: files('/'); dump($ files);

用于文件夹

$ files = Storage :: files('foldername'); dump($ files);

亚马逊s3中的子目录确实无关紧要,仅存储区和文件名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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