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' ); |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案
· 【译】.NET 升级助手现在支持升级到集中式包管理
· 独立开发经验谈:如何通过 Docker 让潜在客户快速体验你的系统
· 并发编程 - 线程同步(二)