今天用原生的HTML form和PHP实现了多文件上传,感觉比调库要简单很多,可以自由定制和增删功能。
有几个地方需要注意:
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>
同样需要注意几点:
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>";
}
}
注:本示例没有做文件类型、大小、个数的限制。在实际使用时,需要按照自己的需求进行修改。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。