使用ajaxfileupload插件实现异步上传并保存图片功能

前端之家收集整理的这篇文章主要介绍了使用ajaxfileupload插件实现异步上传并保存图片功能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

使用jquery插件ajaxfileupload.js可以实现页面无刷新上传图片文件后台管理有关图片上传功能可以利用它,很方便

一、目标效果:
1.前端,页面上传多张图片时,POST到服务器端,页面能立即显示图片效果,并且不刷新页面
2.后台,页面POST过来的图片重命名并保存到服务器

二、思路:
1.封装一个js函数uploadimg(imgid,fileid,hiddenid),里面调用ajaxfileupload.js的函数$.ajaxFileUpload()将标签input type=’file’ 里的文件ajax方式上传到服务器,上传成功后接收返回json数据——图片在服务器端的路径data.path,将该值赋给img标签和对应的隐藏域
2.在服务器端有个专门处理ajax上传图片PHP文件,首先判断文件类型和大小是否合法,然后将文件重命名并且移动一个文件暂存区,然后json格式返回图片路径给前端页面
3.等到页面真正提交表单信息到后台保存时,后台根据隐藏域中的图片路径值,将暂存区中的图片移动到真正永久保存图片文件夹中

三、代码:
1.前端:
①html页面:

<html lang="en-US">
<head>
    <Meta charset="UTF-8"/>
    <Meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel='stylesheet' type="text/css" href='/assets/css/own/img.css' />
    <script src="/assets/js/jquery-1.4.2.min.js"></script>
    <script src="/assets/js/ajaxfileupload.js"></script>
    <script src="/assets/js/own/uploadimg.js"></script>
    <title>upload image</title>
</head>
<body>
    <form id="w0" action="imgfile.PHP" name="form1" method="post" enctype="multipart/form-data" >
    <div> 
        <input type="file" name="fileImg" id="fileImg" onchange="uploadimg('img1','fileImg','hidden1')" accept="image/jpeg,image/png,image/gif"><br />  
        <input type="hidden" name="hidden1" value="" />
        <img class="load0" name="img1" id="img1" src="" />
    </div>
    <br /><br />
    <div> 
        <input type="file" name="fileImg2" id="fileImg2" onchange="uploadimg('img2','fileImg2','hidden2')" accept="image/jpeg,image/gif"><br />  
        <input type="hidden" name="hidden2" id="hidden2" value="" />
        <img class="load0" name="img2" id="img2" src="" />
    </div>
    <br /><br />
    <input type="submit" value="ok">
    </form>
</body>
</html>

②uploadimg.js代码,这里面调用了ajaxfileupload.js的函数来实现ajax图片文件上传,以及接收返回值后控制前端页面显示

function uploadimg(imgid,hiddenid) {
 //imgid指<img />标签id,fileid表示<input type='file' />文件上传标签的id,hiddenid指隐藏域标签id
    $("#"+imgid).attr("src","/assets/img/loading/load.gif").removeClass("load0");//加载loading图片
    $.ajaxFileUpload
    (
        {            
            url: 'http://127.0.0.1/common/upImgfile.PHP',secureuri: false,fileElementId: fileid,dataType: 'json',success: function (data,status) {   //data的内容都是在后台PHP代码自定义的,json格式返回后在这里以对象的方式的访问
                if(typeof (data.error) != 'undefined'){//上传文件出错
                  var error_msg="";
                  switch(data.error)
                  {
                    case "101": error_msg="文件类型错误";
                        break;
                    case "102": error_msg="文件过大";
                        break;
                    case "400": error_msg="非法上传";
                        break;
                    case "404": error_msg="文件为空";
                        break;
                    default :error_msg="服务器不稳定";
                  }
                  alert(error_msg);
                }else{
                    $("#"+imgid).attr("src",data.path).addClass("load1");//加载返回的图片路径并附加上样式
                    $("#"+hiddenid).val(data.path);//给对应的隐藏域赋值,以便提交时给后台
                }               
            },error: function (data,status,e) {
                alert(e);
            }
        }
    )
}

2.后台:
upImgfile.PHP代码:

<?PHP //接收POST方式上传文件,存放到临时文件 if(isset($_FILES)&&(!empty($_FILES))){ foreach($_FILES as $el)//获取文件,这里默认都是每次都单文件上传 { $file=$el; } if(is_uploaded_file($file["tmp_name"])){//确认是POST方式上传文件 $cache_path="../assets/uploads/cache/";//暂存文件的目录 $fname=$file["name"];//获取文件 $ftype=$file["type"];//获取文件类型 $ftmp_name=$file["tmp_name"];//获取临时文件路径 $fsize=$file["size"];//获取文件大小 $ferror=$file["error"];//获取文件错误代号 //判断文件大小是否符合规则 if(!check_size($fsize)){ echo json_encode(array("error"=>"102"));//102错误码代表文件过大 exit; } $suffix=strtolower(stristr($fname,"."));//获取文件后缀名(包含了点号),并后缀名小写化 //判断文件类型是否为图片 if(!is_img($suffix)){ //如果不是图片类型,直接返回error为101,代表文件类型错误 echo json_encode(array("error"=>"101")); exit; } $uniqStr=uniqid(strtotime("now")."_".mt_rand(100000,999999)."_");//创建随机ID $fname_new = $cache_path.$uniqStr.$suffix;//利用当前时间戳构造新的文件名称  move_uploaded_file($ftmp_name,$fname_new);//将临时文件区的文件移动到暂存区中  $fname_new=stristr($fname_new,"/"); echo json_encode(array("path"=>$fname_new));//返回文件路径给看、客户端  }else{ echo json_encode(array("error"=>"400"));//400错误码代表文件非法上传(不是httppost提交) } }else{ echo json_encode(array("error"=>"404"));//404错误码代表文件为空 } /** *判断文件后缀是否是图片 *@param string $suffix :带点的后缀名(如.jpg) *@return bool 如果是图片后缀名返回true,否则返回false */ function is_img($suffix){ $suffix_arr=array('.jpg','.png','.gif','.jpeg','.bmp'); return in_array(strtolower($suffix),$suffix_arr); } /** *判断文件大小是否非法 *@param int $size :单位为byte的整数,文件大小 *@return bool 如果文件大小小于或等于规定的最大值返回true,否则返回false */ function check_size($size){ $postMaxSize=intval(ini_get("post_max_size"));//post文件最大值 $uploadMaxFilesize = intval(ini_get("upload_max_filesize"));//upload上传文件最大值 $max=min($postMaxSize,$uploadMaxFilesize) *1024*1024;//将MB转换为byte单位数据 if(intval($size)<=$max){ return true; }else{ return false; } }

四、效果

猜你在找的Ajax相关文章