前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTML+PHP实现多文件上传

HTML+PHP实现多文件上传

原创
作者头像
ExASIC
修改2020-07-23 17:36:52
5.5K3
修改2020-07-23 17:36:52
举报
文章被收录于专栏:ExASICExASIC

今天用原生的HTML form和PHP实现了多文件上传,感觉比调库要简单很多,可以自由定制和增删功能。

HTML

有几个地方需要注意:

1. input的`name`需要加[],例如files[],不然php只能看到最后一个文件

2. input需要加multiple

3. form需要设置enctype为multipart/formdata

4. form的method必须是post,不可以用get

代码语言:html
复制
<form id="form1" name="form1" enctype="multipart/form-data" action="upload.php" method="post">
   <div class="form-group">
     <input type="file" id="fileupload" name="files[]" class="form-control-file" multiple="multiple">
   </div>
   <button type="submit" class="btn btn-primary">开始上传</button>
 </form>

PHP

同样需要注意几点:

1. 文件上传到服务器的临时目录/tmp/是不需要自己控制的

2. 服务器处理的过程主要是从/tmp/xxx移到指定目录,其它都是附加的。

3. 上传多个文件时,文件还是按照名字、临时名字、类型、出错、大小等信息分别存了好几个数组。以文件名字为例,$_FILES['files']['name'][$i] 用索引挨个处理。

代码语言:javascript
复制
#从POST中取出文件信息
$file = $_FILES['files'];

if(!is_null($file) and is_array($file['name'])){
#上传了多个文件
  
  #判断文件个数
  $file_num = count($file['name']);
  
  #上传目录
  $upload_path = $_SERVER['DOCUMENT_ROOT'] . "/upload/";
  
  #用for循环逐个保存文件
  for($i=0; $i<$file_num; $i++){
  
    #用时间和随机数起新的名字,避免重名
    $new_file_name = date("Ymd") . "_" .rand(10000, 99999) . "." . end(explode('.', basename($file['name'][$i])));
    
    #从临时文件/tmp/xxx移到指定上传目录    
    if(move_uploaded_file($file['tmp_name'][$i], $upload_path . $new_file_name)){
      #输出上传后的文件路径,方便用户复制粘贴
      echo "<p>";
      echo "  <span>[" . $file['name'][$i] . "](http://iccircle.com/upload/" . $new_file_name . ")</span>";
      echo "  <span><a href='http://iccircle.com/upload/" . $new_file_name . "' target='_blank'>预览</a></span>";
      echo "</p>";
    }else{
      echo "<p>fail</p>";
    }
  }
  
}else if(!is_null($file) and is_string($file['name'])){
#上传了单个文件,单个文件时数据不是数组的形式,只是字符串,所以单独处理

  $upload_path = $_SERVER['DOCUMENT_ROOT'] . "/upload/";

  $new_file_name = date("Ymd") . "_" .rand(10000, 99999) . "." . end(explode('.', basename($file['name'])));
  if(move_uploaded_file($file['tmp_name'], $upload_path . $new_file_name)){
    echo "<p>";
    echo "  <span>[" . $file['name'] . "](http://iccircle.com/upload/" . $new_file_name . ")</span>";
    echo "  <span><a href='http://iccircle.com/upload/" . $new_file_name . "' target='_blank'>预览</a></span>";
    echo "</p>";
  }else{
    echo "<p>fail</p>";
  }
}

最后

注:本示例没有做文件类型、大小、个数的限制。在实际使用时,需要按照自己的需求进行修改。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HTML
  • PHP
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档