以 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 的 文件管理的更多相关文章

  1. 基于Laravel+Swoole开发智能家居后端

    基于Laravel+Swoole开发智能家居后端 在上一篇<Laravel如何优雅的使用Swoole>中我已经大概谈到了Laravel结合Swoole的用法. 今天,我参与的智能家居项目基 ...

  2. 【转】基于laravel制作APP接口(API)

    这篇文章主要介绍了基于laravel制作APP接口(API)的相关资料,需要的朋友可以参考下 前期准备 前言,为什么做以及要做个啥本人姓小名白,不折不扣编程届小白一名,但是自从大一那会儿接触到编程这件 ...

  3. 基于 Laravel、Vue.js开发的全新社交系统----ThinkSNS+

    什么是ThinkSNS+ ThinkSNS(简称TS)始于2008年,一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+.新的产品名 ...

  4. 【社交系统ThinkSNS+研发日记三】基于 Laravel Route 的 ThinkSNS+ Component

    [社交系统ThinkSNS+研发日记系列] 一.<ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1> 二.<基于 Laravel 开发 Th ...

  5. 基于 Laravel 开发 ThinkSNS+ 中前端的抉择(webpack/Vue)踩坑日记【ThinkSNS+研发日记系列】

    在上一篇文章< ThinkSNS+基于Laravel master分支,从1到 0,再到0.1>,简单的介绍了 社群系统ThinkSNS+ ,这里分享在开发过程中,前端选择的心理活动. L ...

  6. ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1

    什么是 ThinkSNS+ 09 年,由北京的团队开发了 ThinkSNS 涉足社交开源行业.这么多年累计不少客户.2014-2016,两年都在维护和开发之前基于 TP 的 ThinkSNS , 慢慢 ...

  7. 基于Laravel框架的一个简单易学的微信商城(新手必学)

    俗话说,麻雀虽小可五脏俱全呀! 今天分享的这个基于Laravel的小项目大概功能有这些: 1.实现会员登录.注册功能.数据双向验证功能.2.实现手机短信验证.邮件激活账号.邮件通知.3.ajax提交数 ...

  8. 基于 Laravel Route 的 ThinkSNS+ Component

    这里是传送门: <ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1[ThinkSNS+研发日记系列一]> <基于 Laravel 开发 Th ...

  9. 基于 Laravel 开发 ThinkSNS+ 中前端的抉择(webpack/Vue)踩坑日记

    在上一篇文章< ThinkSNS+基于Laravel master分支,从1到 0,再到0.1>,简单的介绍了 ThinkSNS+ ,这里分享在开发过程中,前端选择的心理活动. Larav ...

随机推荐

  1. 一兄弟把/etc/init.d/functions误删除了,这是多么悲催的节奏啊;

    RPM resource /lib/lsb/init-functions /lib/lsb/init-functions vs. /etc/init.d/functions in init scrip ...

  2. lsof |grep deleted;du -sh / ;df -h;

    有台机器磁盘满了: 进程端口都正常,存活:但是页面却完全打不开了: 日志爆满:删除日志后: 在根上 du -sh * 然后 df -h 发现差别太大了: du -sh * / 才不足7G: df -h ...

  3. leetcode15—3Sum

    Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find ...

  4. Arduino入门笔记(8):利用12864和ADXL345学习重力感应控制

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.Arduino UNO板 https://item.t ...

  5. centos6.4安装 zabbix agent

    1.防火墙设置 允许zabbix-agent的10050端口通过  iptables -A INPUT -p tcp --dport 10050 -j ACCEPT  2.安装zabbix agent ...

  6. linux echo设置颜色

    echo要变换颜色的时候,要使用参数-e 格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo -e "\033[41;36 ...

  7. day42

    今日内容: 1.子查询补充 2.正则表达式 3.pymysql 1.子查询补充 什么是子查询? 将上一次查询的结果作为下一次查询的条件或原数据 又称为内查询 作用:当你的需求,一次查询无法满足的时候( ...

  8. STS-创建spring配置文件

    1.创建一个bean文件 2.输入文件名applicationContext.xml 3.这里会自动显示模板文件 4.创建后,自动填充头不定义 到这里就可以发现,我们创建spring文件时,需要的配置 ...

  9. 20155301 Web基础

    20155301 Web基础 1.基础问题回答 (1)什么是表单 答: 表单是一个包含表单元素的区域. 表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选框等等)输入信息的元素 (2)浏 ...

  10. 20155310 《网络攻防》Exp4 恶意代码分析

    20155310 <网络攻防>Exp4 恶意代码分析 基础问题 1.如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些, ...