当前位置:   article > 正文

thinkphp8结合layui2.9 图片上传验证

thinkphp8结合layui2.9 图片上传验证
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\index\validate;
  4. use think\Validate;
  5. class Upload extends Validate
  6. {
  7. /**
  8. * 定义验证规则
  9. * 格式:'字段名' => ['规则1','规则2'...]
  10. *
  11. * @var array
  12. */
  13. protected $rule = [
  14. 'image' => 'fileExt:jpg,png|fileSize:204800|fileMime:image/jpeg,image/png', // 文件扩展名限制为jpg, png;文件大小限制为200K;文件MIME类型限制为image/jpeg, image/png
  15. ];
  16. /**
  17. * 定义错误信息
  18. * 格式:'字段名.规则名' => '错误信息'
  19. *
  20. * @var array
  21. */
  22. protected $message = [
  23. 'image.fileExt' => '图片格式必须为jpg或png',
  24. 'image.fileSize' => '图片大小不能超过200K',
  25. ];
  26. }

在index应用下,创建了验证器

  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\index\controller;
  4. use think\Request;
  5. use app\index\validate\Upload as ValidateUpload;
  6. use think\facade\Filesystem as Fs;
  7. class Upload
  8. {
  9. public function index()
  10. {
  11. return view('/upload');
  12. }
  13. public function upload(Request $request)
  14. {
  15. $file = $request->file('file');
  16. $validate = new ValidateUpload();
  17. if (!$validate->check(['image' => $file])) {
  18. return json(['code' => 1, 'msg' => $validate->getError()]);
  19. }
  20. $savename = Fs::disk('public')->putFile('', $file);
  21. // 确保路径使用正斜杠
  22. $savename = str_replace('\\', '/', $savename);
  23. return json(['code' => 0, 'msg' => '上传成功', 'data' => ['url' => '/storage/' . $savename]]);
  24. }
  25. }

index应用下,创建了index控制器,upload方法处理了来自前端的ajax上传;

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1">
  6. <title>Demo</title>
  7. <!-- 请勿在项目正式环境中引用该 layui.css 地址 -->
  8. <link href="//unpkg.com/layui@2.9.14/dist/css/layui.css" rel="stylesheet">
  9. </head>
  10. <body>
  11. <div class="layui-upload-drag" style="display: block;" id="ID-upload-demo-drag">
  12. <i class="layui-icon layui-icon-upload"></i>
  13. <div>点击上传,或将文件拖拽到此处</div>
  14. <div class="layui-hide" id="ID-upload-demo-preview">
  15. <hr> <img src="" title="上传成功后渲染" style="max-width: 100%">
  16. </div>
  17. </div>
  18. <!-- 请勿在项目正式环境中引用该 layui.js 地址 -->
  19. <script src="//unpkg.com/layui@2.9.14/dist/layui.js"></script>
  20. <script>
  21. layui.use(function(){
  22. var upload = layui.upload;
  23. var $ = layui.$;
  24. // 渲染
  25. upload.render({
  26. elem: '#ID-upload-demo-drag',
  27. url: '/index/upload/upload/', // 实际使用时改成您自己的上传接口即可。
  28. accept: 'images', // 指定允许上传的文件类型
  29. exts: 'jpg|png', // 允许上传的文件后缀,不带点,多个用|分割,如果需要所有类型则把整个MIME类型写上,如image/*'
  30. done: function(res){
  31. if(res.code != 0){
  32. return layer.msg(res.msg);
  33. } else {
  34. layer.msg('上传成功');
  35. $('#ID-upload-demo-preview').removeClass('layui-hide').find('img').prop('src', res.data.url);
  36. console.log(res);
  37. }
  38. }
  39. });
  40. });
  41. </script>
  42. </body>
  43. </html>

这是layui上传图片的前端示例代码;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/885215
推荐阅读
相关标签
  

闽ICP备14008679号