Laravel Response :: download()在Laravel中显示图像

时间:2015-03-27 12:09:26

标签: php image file laravel-5

所以我想出了在laravel 5中存储和显示图像的两种可能性。第一种方式:显示图像我有一条路线(例如loadFile/profil/{profilID}/main),返回:

return Response::download($filepath)

我的图片存储在存储文件夹中,因此我无法通过网址访问它们,因为:www.domain.com/sotrage/files/...显然不起作用。

另一个可能性是将图像存储在公共文件夹中并通过其URL访问它们。

我的问题:我应该使用两种可能性中的哪一种,以及在整个Laravel中存储图像的最佳做法是什么。

3 个答案:

答案 0 :(得分:3)

图片上传

$path = public_path('uploads/image/')
$file_name = time() . "_" . Input::file('image')->getClientOriginalName();
Input::file('image')->move($path, $file_name);

下载图片

$filepath = public_path('uploads/image/')."abc.jpg";
return Response::download($filepath);

答案 1 :(得分:1)

您不应在存储设备上使用File::anything()。或is_file()readfile()public_path()或类似的东西。因为如果您将数据切换到远程主机,这会中断,并且首先达到使用Flysystem的目的。

Laravel中Storage类的主要要点之一是能够在本地存储,亚马逊s3,sftp或其他任何存储之间轻松切换。

正确的方法

Storage::download()允许您将HTTP标头注入响应中。默认情况下,它包含一个偷偷摸摸的“ Content-Disposition:attachment”,这就是为什么您的浏览器不“显示”图片,而是提示您。

您要将其转换为“ Content-Disposition:inline”。

这是覆盖它的方法:

// Overwrite the annoying header
$headers = array(
    'Content-Disposition' => 'inline',
);

return Storage::download($storage_path, $filename, $headers);

或者您可以使用Storage :: get()

但这需要您获取类型。

$content = Storage::get($path);
return response($content)->header('Content-Type', $type);

答案 2 :(得分:0)

/**
 * .
 * ├── public
 * │   ├── myimage.jpg
 * 
 * example.com/myimage.jpg
 */
  

存储目录用作各种临时文件存储   Laravel服务,例如会话,缓存,编译视图模板。   该目录必须可由Web服务器写入。这个目录是   由Laravel维护,你不需要修补它。