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--文件管理及上传自定义目录及文件名的更多相关文章

  1. egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名

    egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名 评论:10 · 阅读:8437· 喜欢:0 一.需求 二.CSRF 校验 三.通过 form 表单上传文件 四.通过 ...

  2. 升级IOS8游戏上传自定义头像功能失效的问题

    为了支持arm64,之前已经折腾了很久,昨晚打包准备提交苹果审核时,测试那边的同事反馈说游戏上传自定义头像功能不可用了. 游戏上传自定义功能的简介:卡牌游戏最初是<比武招亲>中有一个充VI ...

  3. Laravel 5 - 文件上传

    一.简介 Laravel 有很棒的文件系统抽象层,是基于 Frank de Jonge 的 Flysystem 扩展包. Laravel 集成的 Flysystem 提供了简单的接口,可以操作本地端空 ...

  4. 使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能

    我最近由于在做一个关于FTP文件上传和下载的功能时候,发现Apache FTP jar包没有提供对整个目录结构的上传和下载功能,只能非目录类型的文件进行上传和下载操作,后来我查阅很多网上的实现方法,再 ...

  5. Linux中ftp不能上传文件/目录的解决办法

    在linux中不能上传文件或文件夹最多的问题就是权限问题,但有时也不一定是权限问题了,像我就是空间不够用了,下面我来总结一些ftp不能上传文件/目录的解决办法   在排除用户组和权限等问题后,最可能引 ...

  6. 从本地上传整个目录到hdfs的java程序

    首先在网上找了好久没有找到从本地文件系统上传整个目录到hdfs文件系统的程序,权威指南上也没有,都是单个文件上传,所以这里自己编写了一个程序,封装成jar包执行能够复制. 先说明一下代码:须要手动输入 ...

  7. Java中FTPClient上传中文目录、中文文件名乱码问题解决方法【好用】

    转: Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 问题描述: 使用org.apache.commons.net.ftp.FTPClient创建中文目录.上传中文文件名时,目录 ...

  8. WordPress 后台上传自定义网站Logo

    需求: 众所周知一般网站的logo都是固定的所以我在做网站时也是使用的静态logo文件,但最近用wp给一个客户做的网站时,因为网站现在的logo可能会需要重新设计,所以客户提出了需要在后台可以自己修改 ...

  9. laravel之文件上传

    laravel框架中的文件上传我们应该如何实现此功能呢? 之前也是没有使用过laravel的文件上传功能,后来在网上找到一些教程,五花八门.让我看起来有点头疼. 有时候找到测试浪费好长时间最后还是出不 ...

随机推荐

  1. Java List<String> list=new ArrayList<String>();为什么要声明为List,而不是ArrayList<String>

    例如:代码List list = new ArrayList(); 下面通过list来操作集合.假如代码编写后却发现集合使用的不准确,应该使用LinkedList,那么只要修改一行代码List lis ...

  2. request-html 登陆百度

    import asyncio from requests_html import HTMLSession url = 'https://passport.baidu.com/v2/?login& ...

  3. Elasticsearch 7.x - IK分词器插件(ik_smart,ik_max_word)

    一.安装IK分词器 Elasticsearch也需要安装IK分析器以实现对中文更好的分词支持. 去Github下载最新版elasticsearch-ik https://github.com/medc ...

  4. 一些SQL保存

    因为两种Oracle数据库中对于结果行号的处理异同造成的. 在MSSQLServer中,可以使用top和ROW_NUMBER()方法的结合来实现,一般写法比较简单,而Oracle则有很大的不同. 只能 ...

  5. shell 变量的 {} ()

    1.Shell中变量的原形:${var} 变量的原形:${var},即是加一个大括号来限定变量名称的范围   [root@bogon sh]# aa='ajax' [root@bogon sh]# e ...

  6. 使用Python的turtle库实现六角形以及正方形螺旋线的绘制

    1.六角形的绘制 思路:一个六角形可以看作是两个等边三角形具有共同的中心且垂线互成60°角.所以只需实现一个等边三角形的绘制以及第二个三角形绘制起点的移动即可. 代码如下: import turtle ...

  7. 图表可视化highcharts和百度的echarts

    前端数据可视化插件有很多,有 Highcharts(https://www.hcharts.cn/) Echarts(http://echarts.baidu.com/) D3(https://d3j ...

  8. jsp里导入java包的问题

    写jsp导包的时候出了两处错误(什么?特么两处,总共就一句话啊...): 新建jsp文件会自动生成一句: <%@ page language="java" import=&q ...

  9. Tomcat8服务

    Windows部署Tomcat8服务在windows上部署Tomcat服务后,可以将Tomcat设为开机启动,即开机后Tomcat就会自动运行.这样就不用每次进到Tomcat的bin目录双击start ...

  10. 如何从notepad++的偏移量查找

    有的时候报错的会把偏移量直接报错给我们,我就需要根据偏移量定位我们的错误. 比如他报错偏移量1009. 做搜索(按Ctrl + F) 选择Regular expressions并确保有. matche ...