【问题标题】:How to display image from aws s3 in blade laravel 5.2如何在刀片 laravel 5.2 中显示来自 aws s3 的图像
【发布时间】:2021-02-19 12:08:24
【问题描述】:

我创建了一种从 aws S3 获取数据(图像文件)的方法,如下所示:

 public static function getImage ($imagePath)
    {
        if(Storage::exists($imagePath))
        {
            return Storage::disk('s3')->get($imagePath);
        }else
        {
            return 'No Image';
        }
    }

我确定这些图像存在于 aws 上,所以没有问题。 然后我使用上述方法作为刀片视图中的 src,如下所示:

{!!Html::image(getImage($myPath),'logo',['width'=>60,'height'=>55])!!}

这里的$myPath 已经指向 aws 上的特定文件,例如:bucket/file.jgp。但是当我运行我的网页时,这个 Html::Image 给出了这样的视图:

这里发生了什么?为什么 Html::image 无法呈现我的图像文件? :(

【问题讨论】:

  • 只是{{ HTML::image($myPath) }}
  • 如果我只使用 HTML::image($myPath),它会给出一个空图像... :)
  • return Storage::disk('s3')->get($imagePath); 返回图像的原始字符串内容
  • HTML::image 似乎不支持raw

标签: php amazon-web-services amazon-s3 laravel-5


【解决方案1】:

适用于 Laravel 6.x

<img src="{{Storage::disk('s3')->url($imagePath)}}">

【讨论】:

  • 这只有在 setVisiblity 为 public 时才有效
【解决方案2】:

您可以使用Storage::url($imagePath)。请参阅 laravel 文档上的 Filesystem / Cloud storage

【讨论】:

  • 这是不正确的。 Storage::disk()-&gt;get() 将返回一个原始图像内容字符串。
  • Storage::url 未定义...我不能使用它,所以我使用 Storage::disk()->get 代替.. :)
  • Storage::disk('s3')-&gt;url($filePath) 应该可用。然后显示图像只需要将图像src标签设置为该方法的结果
【解决方案3】:
{!!Html::image(<Your S3 bucket URL>.$myPath),'logo',['width'=>60,'height'=>55])!!}

您可以将 S3 URL 保存在配置文件中并使用配置值而不是每次都写入实际值。

【讨论】:

  • 感谢您的回答@Vikas...看来我这里有一个存储桶权限问题.. :v
  • 您还应该在将图像存储到 S3 Storage::disk('s3')-&gt;put('file.jpg', $contents, 'public'); 时设置可见性。 File Visibility
  • Oooowh...我明白了... Okiee...让我把'public'然后...:D
  • mmm... 是一样的.... 放 'public' 后仍然有权限问题... :'(
  • 不知道是什么问题
【解决方案4】:

我遇到了同样的问题。这段代码sn-p解决了

<img src="{!! url(<path to your image>) !!}" />

【讨论】:

    【解决方案5】:

    首先,您需要在控制器中对其进行公开推广

    $path = Storage::disk('s3')->put('profileImages/', $request->file('profile_image'), 'public');
    
    //save image name in database
    $user->profile_image = basename($path);
    

    在刀片文件中

    <img src="{{Storage::disk('s3')->url('profileImages/' . $user->profile_image)}}" />
    

    【讨论】:

      【解决方案6】:

      您可以添加如下访问器来获取图片 URL

      它返回图片的 URL,你可以通过 $profile->image 访问它

      public function getImageAttribute($value)
      {
          if ($value) {
      
              return Storage::disk('s3')->url($value);
          }
      
          return "https://source.unsplash.com/96x96/daily";
      }
      

      我假设你保存图像如下

      $path = $request->file('image')->store('images', 's3');
              
      Storage::disk('s3')->setVisibility($path, 'public');
      
      $profile->update([
            'image' =>  $path
            ]);
      

      您可以查看此提交以获取更多详细信息

      https://github.com/itxshakil/ediary/commit/23cb4b1cb7b8a4eac68f534e8c5b6897abc6421a

      【讨论】:

      • 那是你的仓库吗?我想知道为什么在模型中将返回设置为 url,如果在我的情况下我存储到 S3 但我试图从“posts”表中返回“image_url”,我应该如何在刀片视图中键入它?非常感谢!
      • 是的@Eduardo,这是我的仓库。我回来是因为它是一个访问器。现在在刀片中,我可以通过&lt;img src="{{$model-&gt;image}}" &gt; 显示图像
      【解决方案7】:

      我已阅读所有解决方案,但没有人直接指出。所以我想写下我的答案。对于这个问题,我只需要添加这条简单的线和吊杆,它就开始工作了。但是我收到了拒绝访问警报,您也应该检查该问题。

      <img class="img-responsive" src="{!! Storage::disk('s3')->url('thumbs/' . $business->image->path) !!}" alt="thumb">
      

      【讨论】:

        【解决方案8】:

        这行得通 Storage::disk('s3')-&gt;url($imagePath)

        也可以通过您的 Minio 浏览器。

        你必须Add 一个政策Read and Write

        【讨论】:

          猜你喜欢
          • 2018-09-05
          • 1970-01-01
          • 2022-07-08
          • 1970-01-01
          • 2019-06-12
          • 2020-09-13
          • 2016-09-12
          • 2022-11-10
          • 2016-09-11
          相关资源
          最近更新 更多