基于 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+Swoole开发智能家居后端
基于Laravel+Swoole开发智能家居后端 在上一篇<Laravel如何优雅的使用Swoole>中我已经大概谈到了Laravel结合Swoole的用法. 今天,我参与的智能家居项目基 ...
- 【转】基于laravel制作APP接口(API)
这篇文章主要介绍了基于laravel制作APP接口(API)的相关资料,需要的朋友可以参考下 前期准备 前言,为什么做以及要做个啥本人姓小名白,不折不扣编程届小白一名,但是自从大一那会儿接触到编程这件 ...
- 基于 Laravel、Vue.js开发的全新社交系统----ThinkSNS+
什么是ThinkSNS+ ThinkSNS(简称TS)始于2008年,一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+.新的产品名 ...
- 【社交系统ThinkSNS+研发日记三】基于 Laravel Route 的 ThinkSNS+ Component
[社交系统ThinkSNS+研发日记系列] 一.<ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1> 二.<基于 Laravel 开发 Th ...
- 基于 Laravel 开发 ThinkSNS+ 中前端的抉择(webpack/Vue)踩坑日记【ThinkSNS+研发日记系列】
在上一篇文章< ThinkSNS+基于Laravel master分支,从1到 0,再到0.1>,简单的介绍了 社群系统ThinkSNS+ ,这里分享在开发过程中,前端选择的心理活动. L ...
- ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1
什么是 ThinkSNS+ 09 年,由北京的团队开发了 ThinkSNS 涉足社交开源行业.这么多年累计不少客户.2014-2016,两年都在维护和开发之前基于 TP 的 ThinkSNS , 慢慢 ...
- 基于Laravel框架的一个简单易学的微信商城(新手必学)
俗话说,麻雀虽小可五脏俱全呀! 今天分享的这个基于Laravel的小项目大概功能有这些: 1.实现会员登录.注册功能.数据双向验证功能.2.实现手机短信验证.邮件激活账号.邮件通知.3.ajax提交数 ...
- 基于 Laravel Route 的 ThinkSNS+ Component
这里是传送门: <ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1[ThinkSNS+研发日记系列一]> <基于 Laravel 开发 Th ...
- 基于 Laravel 开发 ThinkSNS+ 中前端的抉择(webpack/Vue)踩坑日记
在上一篇文章< ThinkSNS+基于Laravel master分支,从1到 0,再到0.1>,简单的介绍了 ThinkSNS+ ,这里分享在开发过程中,前端选择的心理活动. Larav ...
随机推荐
- html5获取地理位置信息API
html5获取地理位置信息API 在HTML5中,可以看下如何使用Geolocation API来获得用户的地理位置信息,如果该浏览器支持的话,且设备具有定位功能,就能够直接使用这组API来获取当前位 ...
- Web前端性能杂记
前面说过,用户感受的响应时间是取决于诸多因素的,我们几乎不能得到真实的用户响应时间.对于Web应用前端性能的研究也不是为了准备得到一个响应时间,其性能一部分取决于Web服务器和应用服务器(下载资源,执 ...
- vue中的img src 动态加载本地json的图片路径写法。
目录: 注意:本地json文件和json文件里的图片地址都必须写在static 静态文件夹里:否则json文件里的url地址找不到. major_info.json文件里的图片路径写法 页面通过v-b ...
- 基于TLS证书手动部署kubernetes集群(上)
一.简介 Kubernetes是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S. K8S是Google内部一个叫Borg的容器集群管理系统衍生 ...
- CF1096G Lucky Tickets
https://www.luogu.org/problemnew/show/CF1096G 显然dp出用\(\frac{n}{2}\)个数能拼出来的每个数的方案数,平方相加就行了,dp显然ntt+快速 ...
- [CF983D]Arkady and Rectangles[线段树+可删堆/set]
题意 你有一个无限大的绘图板,开始颜色是\(0\) , 你将进行\(n\) 次绘图,第\(i\) 次绘图会将左下角为 \((x_1, y_1)\),右上角为\((x_2, y_2)\) 的矩形涂成颜色 ...
- css修改select下拉列表的默认样式
select的一些默认样式我们很难修改,比如图标的替换.接下来就说说如何修改这些默认样式: html代码: <div> <select name=""> & ...
- Accer 4752G添加固态硬盘 双系统
(此文一直在草稿箱里躺了一年,略作修改后发布~) 背景:电脑是2011年年末买的,用到现在也已经5年多了,好在没坏过什么硬件,有过2年疯狂打LOL的经历,之后电脑就打不动了,FPS始终上不去,启动游戏 ...
- 小白之selenium+python关于cookies绕开登录2
首先,由于新开始在博客园中写随笔,可能在内容的布局方面就不太懂,导致布局很丑,各位见谅,但是字还是原来的那字,内容还是原来的内容,少了点包装, 下面是对cookie的扩展知识 1.配置文件存储在哪里? ...
- 【容器魔方解读】AWS Re:Invent 2018大会
每年云计算领域技术与商业风向标之一的AWS Re:Invent大会上周在美国拉斯维加斯召开,如往届一样,AWS密集发布了上百项的新产品或新技术.随着国内近两年云计算尤其是公有云的普及度越来越高,国内各 ...