博客列表 >12月9日-前后端文件操作案例-***线上九期班

12月9日-前后端文件操作案例-***线上九期班

邯郸易住宋至刚
邯郸易住宋至刚原创
2019年12月20日 12:54:48642浏览

一、文件上传

1、文件上传前端

代码

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport"
  6. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8. <title>文件上传</title>
  9. </head>
  10. <body>
  11. method属性值只能是post,form 必须添加enctype="multipart/form-data
  12. <form action="demo.php" method="post" enctype="multipart/form-data">
  13. <!--input框的name属性必须添加,必须type="file"-->
  14. <input type="file" name="my_file">
  15. <button>提交</button>
  16. </form>
  17. </body>
  18. </html>

结果

2、文件上传后端

代码

  1. <?php
  2. // 文件上传原理
  3. // 前单表单中进行一些必要的设置, 以支持文件上传
  4. // 后端PHP主要使用超全局变量: $_FILES 来处理上传的文件
  5. if (!isset($_FILES['my_file'])) {
  6. echo '<script>alert("没有文件被上传");location.assign("index.html");</script>';
  7. exit;
  8. }
  9. // 1. 配置上传参数
  10. // 设置允许上传的文件类型
  11. $fileType = ['jpg', 'jpeg', 'png', 'gif'];
  12. // 设置允许上传的最大文件长度
  13. $fileSize = 3145728;
  14. // 上传到服务器上指定的目录
  15. $filePath = '/uploads/';
  16. // 上传的原始文件名
  17. $fileName = $_FILES['my_file']['name'];
  18. // 上传保存在服务器上的临时文件名
  19. $tempFile = $_FILES['my_file']['tmp_name'];
  20. // 3. 判断上传是否成功?
  21. // 主要是通过$_FILES['my_file']['error']值, 等于0成或,大于1出错,出错类型用switch分析
  22. $uploadError = $_FILES['my_file']['error'];
  23. if ($uploadError > 0) {
  24. switch ($uploadError) {
  25. case 1:
  26. case 2: die('上传文件不允许超过3M');
  27. case 3: die('上传文件不完整');
  28. case 4: die('没有文件被上传');
  29. default: die('未知错误');
  30. }
  31. }
  32. // 3. 判断文件扩展名是否正确?
  33. $extension = explode('.',$fileName)[1];
  34. if (!in_array($extension, $fileType)) {
  35. die('不允许上传' . $extension . '文件类型');
  36. }
  37. // 4. 为了防止同名文件相互覆盖, 应该将上传到指定目录的文件重命名,例如用md5+时间戳
  38. $fileName = date('YmdHis',time()).md5(mt_rand(1,99)) . '.' . $extension;
  39. // 5. 判断文件是否上传成功?
  40. // 判断是否是通过post上传的
  41. if (is_uploaded_file($tempFile)) {
  42. if (move_uploaded_file($tempFile, __DIR__ . $filePath.$fileName)) {
  43. // 提示用户上成功,并返回上一个页面,再强行刷新当前页面
  44. echo '<script>alert("上传成功");history.back();</script>';
  45. } else {
  46. die('文件无法移动到指定目录,请检查目录权限');
  47. }
  48. } else {
  49. die('非法操作');
  50. }
  51. exit();

3、上传结果

(1)

(2)

(3)

二、总结

1、前端注意四点

使用form上传文件时,需要注意的四个地方:
method必须是post;
entypy=”multipart/form-data”必须有;
input type必须是file;
input 必须有name=值;

2、后端判断

是关于文件类型、上传是否成功

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议