Laravel提供了强大文件系统,开发文件管理非常方便。默认情况下web只能访问public公共磁盘目录。

访问storage下任意图片

如果图片不是放在storage公共磁盘中,可以定义一个用于访问图片的路由,如下:

routes/web.php定义路由:

1
2
3
4
5
// file manager
Route::group(['prefix' => 'filemanager'], function () {
Route::get('show', 'FileManageController@get')->name('filemanager.show');
});

FileManageController.php中定义action:

1
2
3
4
5
6
7
8
9
10
/**
* @param Request $request
* @return mixed
*/
public function get(Request $request)
{
$filename = $request->get('filename', '');
$file = Storage::get($filename);
return response($file, 200)->header('Content-Type', Storage::mimeType($filename));
}

view里的图片:

1
<img src="{{route('filemanager.show',['filename'=>$image['name']])}}">

公共磁盘图片访问

public 磁盘用于存储可以被公开访问的文件,默认情况下, public 磁盘使用 local 驱动并将文件存储在storage/app/public ,要让这些文件可以通过web访问到,需要创建一个软链 public/storage 指向 storage/app/public

创建这个软链,可以使用Artisan命令 storage:link :

1
php artisan storage:link

图片被存储并且软链已经被创建的情况下,就可以使用辅助函数asset创建一个指向该图片的URL:

1
<img src="{{asset('storage/picture.png')}}">;