使用Ajax无刷新上传图片示例,首选通过JQuery对象获取上传的文件名,要想将JQuery转换成对象必须得先转成DOM对象
然后使用,下面这句加上index索引[0]就可以转化为DOM对象
var files=$("#file")[0].files[0]
后端PHP部分:
使用全局数组 _FILES 得到上传的信息,并且使用数组过滤器过滤上传的类型,再将其以最新时间的命名方式进行改名,最后
将上传到临时目录下的文件移动到目标上传目录,然后以JSON返回结果,具体相关代码如下:
上传结果:
HTML部分:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <script type="text/javascript" src="js/upload.js"></script> <style> .main{ border:1px solid #CCC; margin: auto; width: 600px; height: 300px; border-radius: 20px; } .main p{ margin-left: 10px; } </style> </head> <body> <div class="main"> <p> <lable>请选择要上传的文件:</lable> <input type="file" id="file"> </p> <p> <button>开始上传</button> </p> </div> </body> </html>
JS部分:
$(document).ready(function () { //添加控制事件 $('button:first').click(function () { if($('#file').val().length==0){ $('#file').parent($('span').remove()) $('button:first').after('<span style="color: #ff0000;">请先选择上传的文件!</span>') }else{ //获取文件路径 var files=$("#file")[0].files[0] // var file=files.files[0] console.log(files) //创建 formData 对象 FormData为序列化表单 var formdata = new FormData() formdata.append('files',files) //采用 ajax 进行发送 $.ajax({ url:'upload.php', type:'POST', data:formdata, dataType:'JSON', processData:false,//用于对data参数进行序列化处理,这里必须false;如果是true,就会将FormData转换为String类型 contentType:false,//一些文件上传http协议的关系,自行百度,如果上传的有文件,那么只能设置为false success:function (status) { // console.log(status.msg) $('#file').parent($('span').remove()) $('#file').after('<br><span style="color:#008800;font-size: 14px;">'+status.msg+'</span>') } }) } }) })
PHP部分:
<?php if($_SERVER['REQUEST_METHOD']=="POST"){ //判断提交过来的请求是否为空,不为空则有文件上传 if(isset($_FILES['files'])){ $img_type=['image/jpg','image/jpeg','image/png']; //判断上传的图片类型是否是图片数组中的类型 if(in_array($_FILES['files']['type'], $img_type)){ //将上传的文件重命名 $date=date('Ymdhis');//得到当前时间,如;20070705163148 $fileName=$_FILES['files']['name'];//得到上传文件的名字 $name=explode('.',$fileName);//将文件名以'.'分割得到后缀名,得到一个数组 $newPath=$date.'.'.$name[1];//得到一个新的文件为'20070705163148.jpg',即新的路径 $oldPath=$_FILES['files']['tmp_name'];//临时文件夹,即以前的路径 //将用户文件保存到指定目录 if(move_uploaded_file($oldPath,"upload/{$newPath}")){ echo json_encode(['msg'=>'上传成功!新的文件名是:'.$newPath]); } else { echo json_encode(['msg'=>'上传失败']); } }else{ echo json_encode(['msg'=>'只可以上传jpg,jpeg,png的图片']); } }else{ echo json_encode(['msg'=>'请先上传文件']); } //上传失败的常见错误捕获 if($_FILES['files']['error']>0){ switch ($_FILES['files']['error']) { case 1: echo json_encode(['msg'=>'文件超过php.ini中的默认大小']); break; case 2: echo json_encode(['msg'=>'文件超过表单设置大小']); break; case 3: echo json_encode(['msg'=>'文件只有一部分上传']); break; case 4: echo json_encode(['msg'=>'没有文件上传']); break; case 6: echo json_encode(['msg'=>'没有临时文件夹']); break; case 8: echo json_encode(['msg'=>'上传意外终止']); break; default: echo json_encode(['msg'=>'未知错误']); break; } } //清空临时文件下的文件,系统也会在回话结束时清空 if(file_exists($_FILES['files']['tmp_name'])&&is_file($_FILES['files']['tmp_name'])){ unlink($_FILES['files']['tmp_name']); } } ?>