ThinkPHP6 文件上传验证
文件上传的基础知识
文件上传原理
客户端选择文件先上传至服务器指定的临时文件位置中,再由临时目录中上传至指定目录的过程称为文件上传
文件上传的相关配置
file_uploads(允许/禁止 PHP开启HTTP文件上传(布尔))
upload_tmp_dir (文件上传临时文件所在目录(字符串))
upload_max_filesize (上传文件最大是多少(整型),单位(bytes))
max_file_uploads (允许上传最大文件数(整型))
max_execution_time (脚本在解析器终止之前运行最长时间(单位:秒))
max_input_time (脚本解析输入数据最长时间(秒))
post_max_size (允许POST数据最大值(字符串/整型))
memory_limt (允许脚本分配的最大内存量(以字节为单位))
upload_max_filesize < post_max_size <memory_limt < 系统物理内存
文件上传注意事项
表单必须设置为post方式提交
必须给form增设enctype="multipart/form-data"
在服务器使用$_POST无法获取文件上传信息 ,必须使用$_FILES
$_FILES数组所包含的元素含义
$_FILES["file"]["name"] - 上传文件的名称
$_FILES["file"]["type"] - 上传文件的类型
$_FILES["file"]["size"] - 上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] - 由文件上传导致的错误代码
(异步请求)
参照上传接口文档
请求地址
POST /logo
需进行token认证
示例:
http://adminapi.tbyue.com/logo
请求参数
名称 | 类型 | 必填 | 备注 |
---|---|---|---|
type | string | 是 | 图片类型。商品:goods;分类:category;品牌:brand |
logo | file | 是 | logo文件 |
返回数据
logo文件访问路径
返回示例
"/uploads/goods/20190530/adsdsfsgsds.png"
书写代码
/**
* 单文件上传接口
* @param Request $request
* @return \think\response\Json
*/
public function logo(Request $request): Json
{
// 接收上传的类型
$type = $request->post("type");
// 接收文件上传
$file = $request->file();
// 设定文件上传的大小
$fileSize = 1024*1024*2;
// 验证文件上传的大小、后缀
try {
// 验证文件大小、后缀
validate(['logo'=>'fileSize:'.$fileSize.'|fileExt:jpg,png'])
->check($file);
$files = $request->file("logo");
// 将图片保存至本地
$saveName = \think\facade\Filesystem::putFile($type, $files);
// 将文件上传的路径返回
return success('uploads/' . $saveName);
} catch (\think\exception\ValidateException $e) {
return fail($e->getMessage());
}
}
商品相册上传接口(多图上传)
设置路由
Route::post("images","Upload/images");
参照接口文档
请求地址
POST /images
需进行token认证
示例: http://adminapi.tbyue.com/images
请求参数
名称 | 类型 | 必填 | 备注 |
---|---|---|---|
type | string | 否 | 图片类型。默认为商品:goods |
images | string | 是 | 图片文件 |
返回数据
名称 | 备注 |
---|---|
success | 上传成功的图片地址集合 |
error | 上传成功的图片名称和错误信息集合 |
返回示例
{
“success”:[
"/uploads/goods/20190530/dsgdsafdsfds.png",
"/uploads/goods/20190530/dsfdsdgfdasd.png",
],
"error":[
{
"name":"1.png",
"msg":"图片尺寸错误"
},
{
"name":"2.png",
"msg":"图片类型错误"
}
]
}
书写上传逻辑
/**
* 批量上传图片
* @param Request $request
* @return Json
*/
public function images(Request $request): Json
{
// 接收上传的类型
$type = $request->post("type", "goods");
// 接收文件上传
$file = $request->file("images");
// 设定文件上传的大小
$fileSize = 1024 * 1024 * 2;
// 存储上传失败的信息
$error = [];
// 存储上传成功的信息
$success = [];
// 循环批量验证
foreach ($file as $val) {
// 捕获异常
try {
// 验证文件大小、后缀
validate(['images' => 'fileSize:' . $fileSize . '|fileExt:jpg'])
->check(['images' => $val]);
// 上传文件
$saveName = \think\facade\Filesystem::putFile($type, $val);
// 将成功后的路径保存到数组中
$success = 'uploads/' . $saveName;
} catch (\think\exception\ValidateException $e) {
// 记录验证错误的失败信息
$error= [
'name' => $val->getOriginalName(),
'msg' => $e->getMessage()
];
}
}
// 组装返回数据的结果集
$data = [
'success' => $success,
'error' => $error
];
// 返回数据
return success($data);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具