Laravel--文件管理及上传自定义目录及文件名
laravel 上传 php 需要开启 fileinfo 扩展
先看一个例子:
$file = $request->file('shopimg');
$path = $file->store('public/avatars');
echo $path;
//给storage目录public/avatars/ 上传文件
//获取文件内容
$contents = Storage::get('public\avatars\file.jpg');
//echo $contents;
//判断文件是否存在 1
$exists = Storage::disk('local')->exists('public/avatars/file.jpg');
//echo $exists;
正文:
aravel文件系统
Laravel框架中对文件的管理已经很友好了,官方文档也做了很详细的说明,下面先就一些基础知识做下简单介绍,已了解的同学可以略过本部分。
系统配置
Laravel 有强大的文件系统抽象,基于Frank de Jonge 开发的PHP包,文件系统的配置文件位于 config/filesystems.php
公共磁盘
public 磁盘用于存储可以被公开访问的文件,默认情况下, public 磁盘使用 local 驱动并将文件存储在 storage/app/public ,要让这些文件可以通过web访问到,需要创建一个软链 public/storage 指向 storage/app/public ,这种方式可以将公开访问的文件保存在一个可以很容易被不同部署环境共享的目录,在使用零停机时间部署系统如Envoyer的时候尤其方便。
获取文件
get 方法用于获取指定文件
__exists__方法用于判断给定文件是否存在于磁盘上:
$contents = Storage::get('file.jpg');
$exists = Storage::disk('s3')->exists('file.jpg');
文件上传
在web应用中,最常见的存储文件案例就是存储用户上传的文件,如用户头像、照片和文档等。Laravel通过使用上传文件实例上的store方法让存储上传文件变得简单。你只需要传入上传文件保存的路径并调用store方法即可:
$path = $request->file('avatar')->store('avatars');
指定文件名
$path = $request->file('avatar')->storeAs(
'avatars', $request->user()->id
);
文件删除
Storage::delete(['file1.jpg', 'file2.jpg']);
自定义文件上传
使用Laravel文件上传很方便,在开发中我们需要创建软连接,但是有可能具体项目中不需要创建软连接,或者需要直接在公共盘 public 下面就能直接访问文件,这个时候就需要调整一下配置文件。
默认的驱动是__local__ 驱动 (config/filesystems.php):
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'visibility' => 'public',
],
's3' => [
'driver' => 's3',
'key' => 'your-key',
'secret' => 'your-secret',
'region' => 'your-region',
'bucket' => 'your-bucket',
],
],
我们增加一条驱动信息:
'root' => [
'driver' => 'local',
'root' => base_path(''),
],
'local' => [
'driver' => 'local',
'root' => public_path(''),
],
这样该驱动指向项目根目录,然后我们在上传处理函数中:
$path = $request->file('avatar')->store(
'public/avatars/test.png', 'root'
);
判断文件是否存在或者删除文件时:
Storage::disk('root')->delete($imagePath);
base_path 就是项目根目录
app_path 就是项目下App文件夹
storage_path 就是项目下的storage文件夹
1、获取上传的文件
$file=$request->file('file');
2、获取上传文件的文件名(带后缀,如abc.png)
$filename=$file->getClientOriginalName();
3、获取上传文件的后缀(如abc.png,获取到的为png)
$fileextension=$file->getClientOriginalExtension();
4、获取上传文件的大小
$filesize=$file->getClientSize();
5、获取缓存在tmp目录下的文件名(带后缀,如php8933.tmp)
$filaname=$file->getFilename();
6、获取上传的文件缓存在tmp文件夹下的绝对路径
$realpath=$file->getRealPath();
7、将缓存在tmp目录下的文件移到某个位置,返回的是这个文件移动过后的路径
$path=$file->move(path,newname);
move()方法有两个参数,第一个参数是文件移到哪个文件夹下的路径,第二个参数是将上传的文件重新命名的文件名
8、检测上传的文件是否合法,返回值为true或false
$file->isValid()
转 https://blog.csdn.net/guawawa311/article/details/83057983
https://laravelacademy.org/post/19509.html
https://www.cnblogs.com/blog-dyn/p/10310393.html
Laravel--文件管理及上传自定义目录及文件名的更多相关文章
- egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名
egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名 评论:10 · 阅读:8437· 喜欢:0 一.需求 二.CSRF 校验 三.通过 form 表单上传文件 四.通过 ...
- 升级IOS8游戏上传自定义头像功能失效的问题
为了支持arm64,之前已经折腾了很久,昨晚打包准备提交苹果审核时,测试那边的同事反馈说游戏上传自定义头像功能不可用了. 游戏上传自定义功能的简介:卡牌游戏最初是<比武招亲>中有一个充VI ...
- Laravel 5 - 文件上传
一.简介 Laravel 有很棒的文件系统抽象层,是基于 Frank de Jonge 的 Flysystem 扩展包. Laravel 集成的 Flysystem 提供了简单的接口,可以操作本地端空 ...
- 使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能
我最近由于在做一个关于FTP文件上传和下载的功能时候,发现Apache FTP jar包没有提供对整个目录结构的上传和下载功能,只能非目录类型的文件进行上传和下载操作,后来我查阅很多网上的实现方法,再 ...
- Linux中ftp不能上传文件/目录的解决办法
在linux中不能上传文件或文件夹最多的问题就是权限问题,但有时也不一定是权限问题了,像我就是空间不够用了,下面我来总结一些ftp不能上传文件/目录的解决办法 在排除用户组和权限等问题后,最可能引 ...
- 从本地上传整个目录到hdfs的java程序
首先在网上找了好久没有找到从本地文件系统上传整个目录到hdfs文件系统的程序,权威指南上也没有,都是单个文件上传,所以这里自己编写了一个程序,封装成jar包执行能够复制. 先说明一下代码:须要手动输入 ...
- Java中FTPClient上传中文目录、中文文件名乱码问题解决方法【好用】
转: Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 问题描述: 使用org.apache.commons.net.ftp.FTPClient创建中文目录.上传中文文件名时,目录 ...
- WordPress 后台上传自定义网站Logo
需求: 众所周知一般网站的logo都是固定的所以我在做网站时也是使用的静态logo文件,但最近用wp给一个客户做的网站时,因为网站现在的logo可能会需要重新设计,所以客户提出了需要在后台可以自己修改 ...
- laravel之文件上传
laravel框架中的文件上传我们应该如何实现此功能呢? 之前也是没有使用过laravel的文件上传功能,后来在网上找到一些教程,五花八门.让我看起来有点头疼. 有时候找到测试浪费好长时间最后还是出不 ...
随机推荐
- MySQL Lock--MySQL加锁学习2
准备测试数据: ## 开启InnoDB Monitor SET GLOBAL innodb_status_output=ON; SET GLOBAL innodb_status_output_lock ...
- 高效内存池的设计方案[c语言]
一.前言概述 本人在转发的博文<内存池的设计和实现>中,详细阐述了系统默认内存分配函数malloc/free的缺点,以及进行内存池设计的原因,在此不再赘述.通过对Nginx内存池以及< ...
- 使用vue打包,vendor文件过大,或者是app.js文件很大
我的解决办法: 1.把不常改变的库放到index.html中,通过cdn引入,比如下面这样: 然后找到build/webpack.base.conf.js文件,在 module.exports = { ...
- .net序列化 - Newtonsoft(Json.Net)简单应用
Newtonsoft.Json,一款.NET中开源的Json序列化和反序列化类库. Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简 ...
- C++中得sort函数的比较函数(第三个参数)为什么要声明为static
sort中的比较函数compare要声明为静态成员函数或全局函数,不能作为普通成员函数,否则会报错. 因为:非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局的,因此无法再sort中 ...
- Java - 框架之 SSH 整合
代码获取 十四. ssh 整合1 - 包 1. Struts jar 包 - Struts-2.xx\apps\stutrs2-blank\WEB-INF ...
- PHP命令行常用参数说明和使用
-i 打印phpinfo命令 root@DK:/mnt/hgfs/cpp/php# php -i | grep session -v 输出php版本信息 root@DK:/mnt/hgfs/cpp/p ...
- 2017.10.1 国庆清北 D1T2 两个逗比捉迷藏
题目描述 你是能看到第二题的friends呢. ——laekov Hja和Yjq在玩捉迷藏.Yjq躲了起来,Hja要找他.在他们玩游戏的房间里,只有一堵不透明的墙和一个双面的镜子.Hja和Yjq可以看 ...
- AtCoder Grand Contest 012题解
传送门 \(A\) 肯定是后面每两个陪最前面一个最优 typedef long long ll; const int N=5e5+5; int a[N],n;ll res; int main(){ s ...
- Code Chef JUNE Challenge 2019题解
题面 \(SUMAGCD\) 先去重,易知答案一定是一个数单独一组剩下的一组,前缀后缀\(gcd\)一下就行了 //quming #include<bits/stdc++.h> #defi ...