HTML+PHP实现多文件上传
时间:2022-07-22
本文章向大家介绍HTML+PHP实现多文件上传,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
今天用原生的HTML form和PHP实现了多文件上传,感觉比调库要简单很多,可以自由定制和增删功能。
HTML
有几个地方需要注意:
1. input的`name`需要加[],例如files[],不然php只能看到最后一个文件
2. input需要加multiple
3. form需要设置enctype为multipart/formdata
4. form的method必须是post,不可以用get
<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] 用索引挨个处理。
#从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>";
}
}
最后
注:本示例没有做文件类型、大小、个数的限制。在实际使用时,需要按照自己的需求进行修改。
- 人工智能有可能超越人类大脑?
- 一种简单的数据库性能测试方法
- xiaomao.com7位数高价成交,并已启用建站
- Docker基于已有的镜像制新的镜像-Docker for Web Developers(3)
- 如何通过Remoting实现双向通信
- jenkins 入门教程(上)
- 让jQuery Tools Scrollable控件在Mobile Web里面支持resize功能
- CentOS6.5上golang环境配置
- 马斯克频发推文,或在揭示特斯拉明年大动作?
- yum安装出现No package nodejs available解决办法
- InfoPath中repeationg section动态填充数据
- CSS魔法堂:重新认识Box Model、IFC、BFC和Collapsing margins
- jenkins 入门教程(中)
- docker学习(1) 安装
- HTML 教程
- HTML 简介
- html div 标签介绍
- html span 标签介绍
- html a 超链接标签
- HTML Br换行标签介绍
- HTML P段落标签介绍
- HTML br与p标签区别
- Html H 标题标签
- html px em pt长度单位
- HTML form 标签
- HTML radio 单选框
- HTML B 加粗标签
- HTML strong加粗粗体标签
- HTML em 强调标签
- HTML i 斜体标签
- HTML u下划线标签
- HTML s 删除线标签
- Html img 图片标签
- Html上标注sup与下标注sub标签
- HTML nobr 禁止换行标签
- HTML hr 水平线标签
- HTML label 标签
- HTML input 标签
- HTML textarea 标签
- HTML select下拉列表标签
- HTML checkbox 多选框
- HTML font color 标签
- HTML iframe 框架标签
- HTML Table 表格
- HTML dl dt dd 标签
- HTML ol li有序列表标签
- HTML ul li 无序列表标签
- HTML 注释
- CSS 教程
- CSS 简介
- CSS 语法
- CSS Id 和 Class选择器
- CSS 样式的创建
- CSS background 背景介绍
- CSS 文本样式
- CSS font 字体
- CSS A 链接
- CSS ul ol列表样式
- CSS TABLE 样式
- CSS 框模型
- CSS border 边框
- CSS Outlines 轮廓
- CSS 外边距 Margin
- CSS Padding 内边距
- CSS 分组和嵌套选择器
- CSS 尺寸 (Dimension)
- CSS Display 属性
- CSS Position 定位
- CSS Float 浮动
- CSS 水平对齐(Horizontal Align)
- CSS 组合选择符
- CSS 伪类
- CSS 伪元素
- CSS 导航栏
- CSS 下拉菜单
- CSS 图片廊
- CSS 图像透明/不透明
- CSS sprite 图像拼合技术
- CSS 媒体类型
- CSS 属性选择器
- CSS 实例
- [883]python安装包出现Retrying
- 深入理解java虚拟机学习笔记(三)-虚拟机性能监控与故障处理工具
- [884]Elasticsearch可视化工具
- 如何控制nodejs的线程数
- 算法篇:链表之合并有序链表
- 速读原著-UnixLinux基础(六)
- Python GUI编程:Tkinter
- JVM系列之:通过一个例子分析JIT的汇编代码
- 二叉查找树-增删查和针对重复数据处理的 Java 实现
- 手把手教你实现自定义Spring Boot的 Starter
- JVM详解之:本地变量的生命周期
- VBA解析复合文档01——实现的功能
- VBA解压缩ZIP文件09——解压-静态Huffman
- 第5章 流水线数据脱敏-Jenkins系统凭据管理
- 100% 展示 MySQL 语句执行的神器-Optimizer Trace