设为首页 收藏本站
查看: 700|回复: 0

[经验分享] 怎么样通过php使用html5实现多文件上传?(php多图上传)

[复制链接]

尚未签到

发表于 2017-12-30 13:56:29 | 显示全部楼层 |阅读模式
  <!DOCTYPE html>
  <html lang="zh-cn">
  <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <title>上传相片</title>
  <style>
  * {
  margin: 0;
  padding: 0;
  }
  /*图片上传*/
  html,
  body {

  >
  >  }
  .container {

  >
  >  overflow: auto;
  clear: both;
  }
  .z_photo {

  >
  >  padding: 0.3rem;
  overflow: auto;
  clear: both;
  margin: 1rem auto;
  border: 1px solid #555;
  }
  .z_photo img {

  >
  >  }
  .z_addImg {
  float: left;
  margin-right: 0.2rem;
  }
  .z_file {

  >
  >  background: url('images/addxp.png') no-repeat;
  background-size: 100% 100%;
  float: left;
  margin-right: 0.2rem;
  }
  .z_file input::-webkit-file-upload-button {

  >
  >  border: none;
  position: absolute;
  outline: 0;
  opacity: 0;
  }
  .z_file input#file {
  display: block;

  >  border: 0;
  vertical-align: middle;
  }
  /*遮罩层*/
  .z_mask {

  >
  >  background: rgba(0, 0, 0, .5);
  position: fixed;
  top: 0;
  left: 0;
  z-index: 999;
  display: none;
  }
  .z_alert {

  >
  >  border-radius: .2rem;
  background: #fff;
  font-size: .24rem;
  text-align: center;
  position: absolute;
  left: 50%;
  top: 50%;
  margin-left: -1.5rem;
  margin-top: -2rem;
  }
  .z_alert p:nth-child(1) {
  line-height: 1.5rem;
  }
  .z_alert p:nth-child(2) span {
  display: inline-block;

  >
  >  line-height: .5rem;
  float: left;
  border-top: 1px solid #ddd;
  }
  .z_cancel {
  border-right: 1px solid #ddd;
  }
  </style>
  </head>
  <body>
  <div>
  <!--    照片添加    -->
  <div>
  <div>
  <form method="post" action="scxp.php" enctype="multipart/form-data">
  <input type="file" name="u_file[]" value="" accept="image/*" multiple onchange="imgChange('z_photo','z_file');" />
  <br/> <br/>
  <input type="submit" value="上传" name="submitBtn" />
  </form>
  </div>
  </div>
  <!--遮罩层-->
  <div>
  <!--弹出框-->
  <div>
  <p>确定要删除这张图片吗?</p>
  <p>
  <span>取消</span>
  <span>确定</span>
  </p>
  </div>
  </div>
  </div>
  <script type="text/javascript">
  //px转换为rem
  (function(doc, win) {
  var docEl = doc.documentElement,
  resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
  recalc = function() {
  var clientWidth = docEl.clientWidth;
  if (!clientWidth) return;
  if (clientWidth >= 640) {
  docEl.style.fontSize = '100px';
  } else {
  docEl.style.fontSize = 100 * (clientWidth / 640) + 'px';
  }
  };
  if (!doc.addEventListener) return;
  win.addEventListener(resizeEvt, recalc, false);
  doc.addEventListener('DOMContentLoaded', recalc, false);
  })(document, window);
  function imgChange(obj1, obj2) {
  //获取点击的文本框
  var file = document.getElementById("file");
  //存放图片的父级元素
  var imgContainer = document.getElementsByClassName(obj1)[0];
  //获取的图片文件
  var fileList = file.files;
  //文本框的父级元素
  var input = document.getElementsByClassName(obj2)[0];
  var imgArr = [];
  //遍历获取到得图片文件
  for (var i = 0; i < fileList.length; i++) {
  var imgUrl = window.URL.createObjectURL(file.files);
  imgArr.push(imgUrl);
  var img = document.createElement("img");
  img.setAttribute("src", imgArr);
  var imgAdd = document.createElement("div");
  imgAdd.setAttribute("class", "z_addImg");
  imgAdd.appendChild(img);
  imgContainer.appendChild(imgAdd);
  };
  imgRemove();
  };
  function imgRemove() {
  var imgList = document.getElementsByClassName("z_addImg");
  var mask = document.getElementsByClassName("z_mask")[0];
  var cancel = document.getElementsByClassName("z_cancel")[0];
  var sure = document.getElementsByClassName("z_sure")[0];
  for (var j = 0; j < imgList.length; j++) {
  imgList[j].index = j;
  imgList[j].onclick = function() {
  var t = this;
  mask.style.display = "block";
  cancel.onclick = function() {
  mask.style.display = "none";
  };
  sure.onclick = function() {
  mask.style.display = "none";
  t.style.display = "none";
  };
  }
  };
  };
  </script>
  </body>
  </html>
  <?php
  if($_POST['submitBtn'] == '上传'){//判断提交按钮是否为空
  /*echo "OK<br/>";
  echo "数组:".$_FILES."<br/>";
  if($_FILES){
  echo "是数组<br/>";
  $file = $_FILES["u_file"];
  echo "数组的个数:".count($file)."<br/>";//5
  $name = $file["name"];
  echo "数组的个数:".count($name)."<br/>";//1
  }*/
  //$num = $_FILES["u_file"]["name"];
  //echo "个数是:".count($num);
  //上传多张图:同时上传多张图的上传原理和单张图上传原理是相同的,只不过在对上传字段进行出来了时候增加了一个数组的应用。注意input的name是一个数组的形式,php中获取数组个数的时候,才能获取到有效的数组长度。
  for($i=0; $i<count($_FILES["u_file"]["name"]); $i++){
  $file_path = "images/upload1/";//定义图片在服务器中的存储位置
  $picture_name=$_FILES['u_file']['name'][$i];//获取上传图片的名称
  $picture_name=strstr($picture_name , ".");//通过strstr()函数截取上传图片的后缀
  if($picture_name!= ".jpg"){//根据后缀判断上传图片的格式是否符合要求
  echo "<script>alert('上传图片格式不正确,请重新上传');</script>";//这里有刷新页面
  }else if($_FILES['u_file']['tmp_name'][$i]){
  echo "临时路径:".$_FILES['u_file']['tmp_name'][$i]."<br/>";
  $dataImgName[$i] = date('Ymdhis').$i;//同时上传,后面的会覆盖前面的,所有再在后面加上一个变量区别开,避免覆盖。
  echo "实际路径:".$file_path.$dataImgName[$i]."<br/>";
  move_uploaded_file($_FILES['u_file']['tmp_name'][$i],$file_path.$dataImgName[$i]);
  //执行图片上传
  //echo '<script>alert("图片上传成功!");</script>';
  }
  else
  echo '<script>alert("图片上传失败!");</script>';
  }
  /*
  //上传单张图
  $file_path = "images/upload1/";//定义图片在服务器中的存储位置
  $picture_name=$_FILES['u_file']['name'];//获取上传图片的名称
  $picture_name=strstr($picture_name , ".");//通过strstr()函数截取上传图片的后缀
  if($picture_name!= ".jpg"){//根据后缀判断上传图片的格式是否符合要求
  echo "<script>alert('上传图片格式不正确,请重新上传');</script>";//这里有刷新页面
  }else if($_FILES['u_file']['tmp_name']){
  $dataImgName = date('Ymdhis');
  move_uploaded_file($_FILES['u_file']['tmp_name'],$file_path.$dataImgName);
  //执行图片上传
  echo '<script>alert("图片上传成功!");</script>';
  }
  else
  echo '<script>alert("图片上传失败!");</script>';
  }*/
  }
  ?>
  $_FILES函数:
  当客户端提交后,我们获得了一个$_FILES 数组
  $_FILES数组内容如下:
  $_FILES['myFile']['name'] 客户端文件的原名称。
  $_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。
  $_FILES['myFile']['size'] 已上传文件的大小,单位为字节。
  $_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。
  $_FILES['myFile']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)
  UPLOAD_ERR_OK
  值:0; 没有错误发生,文件上传成功。
  UPLOAD_ERR_INI_SIZE
  值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
  UPLOAD_ERR_FORM_SIZE
  值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
  UPLOAD_ERR_PARTIAL
  值:3; 文件只有部分被上传。
  UPLOAD_ERR_NO_FILE
  值:4; 没有文件被上传。
  值:5; 上传文件大小为0.
  /*******************************************************************/
  题目:怎么样通过php使用html5实现多文件上传?(php多图上传)
  答案:
  定义和用法
  multiple 属性规定输入字段可选择多个值。如果使用该属性,则字段可接受多个值。
  实例:
  <form action="demo_form.asp" method="get">
  Select images: <input type="file" name="img" multiple="multiple" />
  <input type="submit" />
  </form>
  上面实例中的input file 可接受多个文件上传字段。
  了解了html5中file的multiple属性,下面我们开始讲解使用html5实现多文件上传。
  实例代码:
  html:
  <!DOCTYPE html>
  <html>
  <head>
  <meta charset="UTF-8">
  </head>
  <body>
  <form action="my_parser.php" method="post" enctype="multipart/form-data">
  <p><input name="upload[]" type="file" multiple="multiple" /></p>
  <input type="submit" value="Upload all files">
  </form>
  </body>
  </html>
  php代码:
  for($i=0; $i<count($_FILES['upload']['name']); $i++) {
  //Get the temp file path
  $tmpFilePath = $_FILES['upload']['tmp_name'][$i];
  //Make sure we have a filepath
  if ($tmpFilePath != ""){
  //Setup our new file path
  $newFilePath = "./uploadFiles/" . $_FILES['upload']['name'][$i];
  //Upload the file into the temp dir
  if(move_uploaded_file($tmpFilePath, $newFilePath)) {
  //Handle other code here
  }
  }
  }

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-429692-1-1.html 上篇帖子: PHP获取POST数据的几种方法汇总 下篇帖子: php实现多继承
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表