laravel 文件上传的写法

文件系统存储

文件系统的配置文件位于 config/filesystems.php 。
在这个文件中你可以配置所有「磁盘」。
每个磁盘代表特定的存储驱动及存储位置。
每种支持的驱动程序的示例配置都包含在配置文件中。

公共磁盘链接

一般文件上传如果上传在本地服务器,目录都不在public目录下,都是public的上一级目录storage下的app目录中,而这个目录是通过url访问不到的(URL地址是从public下算起)所以需要在public目录下建立storage/app下的软链接(linux叫法,windows叫快捷方式)

1
php artisan storage:link

需要使用的类

1 use Illuminate\Http\Request;
2 use Illuminate\Http\UploadedFile;

 

获取上传的文件

1 $file = $request->file('photo');
2 $file = $request->photo;

 

判断 & 验证

1
2
3
4
5
6
7
8
9
//判断请求中是否存在name为photo的文件
if ($request->hasFile('photo')) {
     
}
 
//验证上传的文件是否有效,实际上只是使用is_uploaded_file校验是否是http表单post过来的
if ($request->file('photo')->isValid()) {
     
}

文件路径 & 扩展名  

UploadedFile 类还包含访问文件的全路径和扩展名的方法。 extension 方法会根据文件内容判断文件的扩展名。该扩展名可能会和客户端提供的扩展名不同:

1
2
3
$path = $request->photo->path();
 
$extension = $request->photo->extension();<br>$extension = $request->file('photo')->getClientOriginalExtension()

存储上传文件  

要存储上传的文件,先配置好 文件系统。你可以使用 UploadedFile 的 store 方法把上传文件移动到你的某个磁盘上,该文件可能是本地文件系统中的一个位置,甚至像 Amazon S3 这样的云存储位置。
store 方法接受相对于文件系统配置的存储文件根目录的路径。这个路径不能包含文件名,因为系统会自动生成唯一的 ID 作为文件名。
store 方法还接受可选的第二个参数,用于存储文件的磁盘名称。这个方法会返回相对于磁盘根目录的文件路径:

1
2
3
$path = $request->photo->store('images');
 
$path = $request->photo->store('images', 's3');

如果你不想自动生成文件名,那么可以使用 storeAs 方法,它接受路径、文件名和磁盘名作为其参数:  

1
2
3
$path = $request->photo->storeAs('images', 'filename.jpg');
 
$path = $request->photo->storeAs('images', 'filename.jpg', 's3');

  

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if($request->hasFile('file')&&$request->file('file')->isValid()){
            $file=$request->file('file');
            $allowed_extensions = ["png", "jpg", "gif","jpeg"];
            $extension = $file->getClientOriginalExtension();
            if (!in_array($extension, $allowed_extensions)) {
                return $this->error('只能上传'.implode('、', $allowed_extensions).'格式的图片.');
            }else{
                $destinationPath = 'uploads/weixin/';
                $preFileName = md5(time().rand(1000,9999));
                $fileName=$preFileName.'.'.$extension;
                $file->move($destinationPath,$fileName);
                $filePath = asset($destinationPath.$fileName);//带着域名的路径
                 
                 
                return $this->apiSuccess('上传图片素材成功.', ['data'=>$result,'file_path'=>asset($destinationPath.$fileName)]);
            }
        }else{
            return $this->error('文件上传失败');
        }

  

1
$request->file('file')->store('Uploads');

  

posted @   dreamboycx  阅读(466)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案
· 【译】.NET 升级助手现在支持升级到集中式包管理
· 独立开发经验谈:如何通过 Docker 让潜在客户快速体验你的系统
· 并发编程 - 线程同步(二)
点击右上角即可分享
微信分享提示