基于 Laravel 的 文件管理

Posted 路漫漫 其修远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于 Laravel 的 文件管理相关的知识,希望对你有一定的参考价值。

  以 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];
}

 

五、文件系统大体完成,还可以添加一些更方便的操作

  文件索引、文件在线预览、文件下载等

以上是关于基于 Laravel 的 文件管理的主要内容,如果未能解决你的问题,请参考以下文章

需要一种有效的方法来避免使用 Laravel 5 重复代码片段

《java精品毕设》基于javaweb宠物领养平台管理系统(源码+毕设论文+sql):主要实现:个人中心,信息修改,填写领养信息,交流论坛,新闻,寄养信息,公告,宠物领养信息,我的寄养信息等(代码片段

Laravel:如何在控制器的几种方法中重用代码片段

Laravel 大将之路由模块

Backbone.js 状态管理/基于 url 片段的视图初始化

基于Laravel开发的组件化代码生成器