以 laravel 5.5 为例,框架集成了文件系统和云存储功能
可以实现文件夹列表、创建、重命名、删除,文件列表、上传、重命名、删除等操作
一、先进行配置
在 config 文件夹下有 filesystems.php,本地一般将文件存储在 storage 目录下。
1、public 磁盘是可以公开访问的,driver(驱动)为 local,root(存储目录)为 storage/app/public,url(访问路由)为 项目路由/storage。
注意:项目域名是绑定在 public 目录下的,为了能访问到 storage 下面的文件,需要在 public 下面创建超链接,
命令为 php artisan storage:link ,执行完后会在 public 目录下看到超链接 storage。
2、在 .env 文件中添加 文件系统配置,
二、配制完成后,就可以对文件进行操作
Storage
facade 用于和所有已配置的磁盘进行交互,
或者引入 Filesystem 如下图
注意选择两种方式时的文件路径
1、获取所有目录,$directory 为相对于配置文件中 root 的路径
$directories = Storage::directories($directory); 获取
$directory
目录下的所有文件夹
$directories = Storage::allDirectories($directory); 获取
$directory
目录及其子目录下的所有文件夹
2、创建目录
Storage::makeDirectory($directory);
在
目录下创建文件夹$directory
3、删除目录
Storage::deleteDirectory($directory); 删除
$directory 文件夹及文件夹下面的所有文件
4、重命名目录
$filesystem->moveDirectory($path_old, $path); 将文件夹 $path_old 重命名为 $path
注意:这两个参数都是相对于 项目根目录的路径
5、文件上传
$path = Storage::putFileAs($dir, $request->file(‘file‘), $file_name); 将文件 $request->file(‘file‘) 命名为 $file_name 上传到 $dir 目录
三个参数分别为:上传位置、表单提交的文件、自定义文件名
6、删除文件、
$filesystem->delete($path); 删除 $path 路径的文件
7、重命名文件名
$filesystem->move($path_old, $path); 将文件 $path_old 重命名为 $path
8、获取所有文件
$files = Storage::files($directory); 获取文件夹
$directory 下面的所有文件
$files = Storage::allFiles($directory); 获取文件夹
下面及其子文件夹下面的所有文件$directory
9、进行删除或重命名操作时,判断操作对象是文件还是文件夹
$filesystem->isFile($path); 判断是否是文件
$filesystem->isDirectory($file); 判断文件是否是文件夹
10、展示文件时需要一些文件的信息
Storage::size($file); 文件大小
Storage::lastModified($file); 文件最后修改时间
$filesystem->extension($file); 文件扩展名
$filesystem->type($directory); 文件类型
三、中文乱码问题
文件系统的编码为 gbk 而代码系统中编码为 utf-8 ,因此两者之间需要转码,借助 iconv
iconv(‘gbk‘, ‘utf-8‘, $dir); 将 $dir 从 gbk 转为 utf-8
iconv(‘utf-8‘, ‘gbk‘, $dir); utf-8 转为 gbk
四、文件大小的单位默认为 bit,文件稍大时需要可读性更好的单位
/** * 返回可读性更好的文件尺寸 */ function human_filesize($bytes, $decimals = 2) { $size = [‘B‘, ‘kB‘, ‘MB‘, ‘GB‘, ‘TB‘, ‘PB‘]; $factor = floor((strlen($bytes) - 1) / 3); return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) .@$size[$factor]; }
五、文件系统大体完成,还可以添加一些更方便的操作
文件索引、文件在线预览、文件下载等