所以我想出了在laravel 5
中存储和显示图像的两种可能性。第一种方式:显示图像我有一条路线(例如loadFile/profil/{profilID}/main
),返回:
return Response::download($filepath)
我的图片存储在存储文件夹中,因此我无法通过网址访问它们,因为:www.domain.com/sotrage/files/...
显然不起作用。
另一个可能性是将图像存储在公共文件夹中并通过其URL访问它们。
我的问题:我应该使用两种可能性中的哪一种,以及在整个Laravel中存储图像的最佳做法是什么。
答案 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维护,你不需要修补它。