jQuery+PHP实现点击input file按钮即时上传图片并显示。

1、a标签点击触发input[type=file]  id="newpic" 的点击事件 $("#file").click() 弹出文件选择框;

2、input[type=file]设定好 onchange() 事件 

<input type="file" accept="image/*" id="newpic" name="newpic" onchange="afterSelect();">

3、主要JS函数

function afterSelect(){
	var files = document.getElementById("newpic").files;
	if(files.length<1){ return false; }
	var fd = new FormData();
    fd.append("newpic", files[0]);
    fd.append("order_id", order_id);//其他字段
	$.ajax({
        type: 'post',
        url: 'uploadpic.php',
        data: fd,
		dataType:'json',
        contentType: false,// 当有文件要上传时,此项是必须的,否则后台无法识别文件流的起始位置
        processData: false,// 是否序列化data属性,默认true(注意:false时type必须是post)
        success: function(res) {
            if(res.flag){
				location.reload();
			}else{
				alert(res.info);
			}
        },error:function(e){
        	alert('上传出错');
        },
		complete:function(XMLHttpRequest,textStatus){
			//清空input file中已选择的文件,方便下次选择同一文件
			var fileinput = document.getElementById("newpic");
			if(fileinput.outerHTML){
				fileinput.outerHTML=fileinput.outerHTML;
            }else{
				//FF
				fileinput.value="";
            }
		},
    })
}

4、uploadpic.php中的代码

require_once('include/uploader.php');
$res = array(
	'flag'		=>false,
	'url'		=>'',//上传得到的新路径
	'picid'	=>'0',//picID
	'info'		=>'',		
);

if(!isset($_POST['order_id'])){
	$res['info'] = '参数错误';
	echo json_encode($res); die();
}
$order_id = intval($_POST['order_id']);


$er = new uploader();
$arr = $er->check("newpic");
if(empty($arr[0])){
	$res['info'] = $arr[1];
	echo json_encode($res); die();
}

$arr = $er->upload("newpic");
if(empty($arr[0])){
	$res['info'] = $arr[1];
}else{
	$res['flag'] = true;
	$res['url'] = $arr[1];
	$res['info'] = "success";
	
}
echo json_encode($res); die();

5、uploader.php中的代码

class uploader{

    public function Check($name){
        $rearr= array('0','校验失败');//flag,msg
        
        $imageTypes = array('gif','jpg','jpeg','pjpeg','png');//图片文件类型
        $imageSize  = 1024000;//图片大小限制1M
        //校验数组
        if(empty($_FILES[$name]) || $_FILES[$name]["error"] > 0){
            $rearr[1]='图片上传失败';
            return $rearr;
        }
        //校验文件类型
        if($_FILES[$name]['type']==''){
            $rearr[1]='文件类型不允许';
            return $rearr;
        }
        $index = strripos($_FILES[$name]['type'],'/')+1;
        $type = substr($_FILES[$name]['type'],$index);
        if(!in_array($type,$imageTypes)){
            $rearr[1]='文件类型不允许';
            return $rearr;
        }
        //校验文件尺寸
        if($_FILES[$name]['size']+3>$imageSize+3){
            $rearr[1]='图片尺寸过大,请重新选择';
            return $rearr;
        }
        $rearr[0]='1';
        $rearr[1]='success';
        return $rearr;
    }
    //执行图片上传(表单中的name属性,保存路径-相对首页路径)
    public function upload($name,$savedir='uploads'){
        $return_arr = array('0','');
        $type = $_FILES[$name]["name"];
        $index = strripos($type,'.');
        $type = substr($type,$index);
        $newname = date('YmdH',time()).rand(10000,99999).'_'.rand(10000,99999).$type;
        $savedir = $savedir.'/image/'.date('Ym',time());
        if(!is_dir($savedir)){
            if(mkdir($savedir,0777,true)){
                //创建目录成功
            }else{
                //创建目录失败
                $return_arr[1]='创建目录失败';
                return $return_arr;
            }
        }
        $filename = $savedir.'/'.$newname;
        if(move_uploaded_file($_FILES[$name]["tmp_name"],$filename)){
            $return_arr[0]='1';
            $return_arr[1]=$savedir.'/'.$newname;
        }else{
            //操作失败
            $return_arr[1]='操作失败';
        }
        return $return_arr;
    }
}