所以我找到了在laravel 5
中存储和显示图像的两种可能性。第一种方式:为了显示图像,我有一条路线(例如loadFile/profil/{profilID}/main
),它返回:
return Response::download($filepath)
我的图像存储在存储文件夹中,因此我无法通过url访问它们,因为这:www.domain.com/sotrage/files/...
显然不起作用。
另一种可能性是将图像存储在公共文件夹中,并通过它们的url访问它们。
我的问题是:我应该使用这两种可能性中的哪一种,以及在Laravel中存储图像的最佳实践是什么。
图像上传
$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);
Jay的解决方案使用public_path()
,这使您的代码超出了框架的保证范围。如果你选择他的解决方案,请确保你这样做是有意的。
通过在存储上使用File::
,或使用is_file()
、readfile()
或public_path()
等底层php基元,当您从本地存储切换到外部解决方案时,您的代码现在将中断。首先,使用Flysystem的目的是将代码从中抽象出来,并允许在本地存储、amazons3、sftp或其他类型之间轻松切换。
因此,如果到目前为止您一直在使用Storage类,那么您应该尽可能将自己绑定到它。您的特定问题有一个非常好的解决方法,只使用存储::方法
正确的方法
Storage::download()
允许您将HTTP头插入到响应中。默认情况下,它包括一个狡猾的"内容处置:附件",这就是为什么你的浏览器不";显示";图片,并提示您。
您希望将其转换为"内容处置:内联"。
以下是如何覆盖它:
// Overwrite the annoying header
$headers = array(
'Content-Disposition' => 'inline',
);
return Storage::download($storage_path, $filename, $headers);
或者您可以使用存储::get()
但是这个需要你获取类型。
$content = Storage::get($path);
return response($content)->header('Content-Type', $type);
/**
* .
* ├── public
* │ ├── myimage.jpg
*
* example.com/myimage.jpg
*/
存储目录用作各种Laravel服务,如会话、缓存、编译的视图模板。此目录必须可由web服务器写入。此目录是由Laravel维护,您无需对其进行修补。