当前位置:   article > 正文

ThinkPHP6 文件上传验证_thinkphp 校验上传的文件

thinkphp 校验上传的文件

文件上传的基础知识

文件上传原理

客户端选择文件先上传至服务器指定的临时文件位置中,再由临时目录中上传至指定目录的过程称为文件上传

文件上传的相关配置 

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

请求参数

名称类型必填备注
typestring图片类型。商品:goods;分类:category;品牌:brand
logofilelogo文件

返回数据

logo文件访问路径

返回示例

"/uploads/goods/20190530/adsdsfsgsds.png"

书写代码

  1. /**
  2. * 单文件上传接口
  3. * @param Request $request
  4. * @return \think\response\Json
  5. */
  6. public function logo(Request $request): Json
  7. {
  8. // 接收上传的类型
  9. $type = $request->post("type");
  10. // 接收文件上传
  11. $file = $request->file();
  12. // 设定文件上传的大小
  13. $fileSize = 1024*1024*2;
  14. // 验证文件上传的大小、后缀
  15. try {
  16. // 验证文件大小、后缀
  17. validate(['logo'=>'fileSize:'.$fileSize.'|fileExt:jpg,png'])
  18. ->check($file);
  19. $files = $request->file("logo");
  20. // 将图片保存至本地
  21. $saveName = \think\facade\Filesystem::putFile($type, $files);
  22. // 将文件上传的路径返回
  23. return success('uploads/' . $saveName);
  24. } catch (\think\exception\ValidateException $e) {
  25. return fail($e->getMessage());
  26. }
  27. }

商品相册上传接口(多图上传)

设置路由

Route::post("images","Upload/images");

参照接口文档

请求地址

POST /images

需进行token认证

示例: http://adminapi.tbyue.com/images

请求参数

名称类型必填备注
typestring图片类型。默认为商品:goods
imagesstring图片文件

返回数据

名称备注
success上传成功的图片地址集合
error上传成功的图片名称和错误信息集合

返回示例

  1. {
  2. “success”:[
  3. "/uploads/goods/20190530/dsgdsafdsfds.png",
  4. "/uploads/goods/20190530/dsfdsdgfdasd.png",
  5. ],
  6. "error":[
  7. {
  8. "name":"1.png",
  9. "msg":"图片尺寸错误"
  10. },
  11. {
  12. "name":"2.png",
  13. "msg":"图片类型错误"
  14. }
  15. ]
  16. }

书写上传逻辑

  1. /**
  2. * 批量上传图片
  3. * @param Request $request
  4. * @return Json
  5. */
  6. public function images(Request $request): Json
  7. {
  8. // 接收上传的类型
  9. $type = $request->post("type", "goods");
  10. // 接收文件上传
  11. $file = $request->file("images");
  12. // 设定文件上传的大小
  13. $fileSize = 1024 * 1024 * 2;
  14. // 存储上传失败的信息
  15. $error = [];
  16. // 存储上传成功的信息
  17. $success = [];
  18. // 循环批量验证
  19. foreach ($file as $val) {
  20. // 捕获异常
  21. try {
  22. // 验证文件大小、后缀
  23. validate(['images' => 'fileSize:' . $fileSize . '|fileExt:jpg'])
  24. ->check(['images' => $val]);
  25. // 上传文件
  26. $saveName = \think\facade\Filesystem::putFile($type, $val);
  27. // 将成功后的路径保存到数组中
  28. $success = 'uploads/' . $saveName;
  29. } catch (\think\exception\ValidateException $e) {
  30. // 记录验证错误的失败信息
  31. $error= [
  32. 'name' => $val->getOriginalName(),
  33. 'msg' => $e->getMessage()
  34. ];
  35. }
  36. }
  37. // 组装返回数据的结果集
  38. $data = [
  39. 'success' => $success,
  40. 'error' => $error
  41. ];
  42. // 返回数据
  43. return success($data);
  44. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/1021382
推荐阅读
相关标签
  

闽ICP备14008679号