(PHP)文件通过ajax无刷新上传

方法1: 通过插件去上传  (还有好多漏洞,改了好几个,暂时没找到改好的代码,只能先上传这个了)

     首先引入插件 <script src="__PUBLIC__/Home/js/ajaxfileupload.js"></script>

        注意:: 据说对jq有版本要求(先引入jq)

     html 代码:

         营业执照: <input   type="file" id="upImg" name="upload" value="上传"  >             

            $('#upImg').on("change", function(){ 
         var arr=$(this).val().split('.');
         var type=arr.pop().toLowerCase();
        if(type==='jpg'||type==='png'||type==='gif'||type==='jpeg'||type==='pdf'){
            $.ajaxFileUpload({
                url:"{:U('UserCommon/save_upload_img')}",type: 'post', secureuri :false,dataType:'json',   
                fileElementId :'upImg',     //file控件ID
                success : function (data){ 
                    if(1 != data.total) return;//因为此处指允许上传单张图片,所以数量如果不是1,那就是有错误了
                    var url = data.files[0].path;
                    var new_url=url.substr(1);
                    $('#show_img_url').attr('src',new_url);
                }
           });
        }else{
           layer.alert('上传文件类型只能是jpg,png,gif,jpeg,pdf格式,请重新选择!!!', {skin: 'layui-layer-molv'  ,closeBtn: 0 });
        }

    });

 protected function ensure_writable_dir($dir) {
        if(!file_exists($dir)) {
            mkdir($dir, 0766, true);
            chmod($dir, 0766);
            chmod($dir, 0777);
        }else if(!is_writable($dir)) {
            chmod($dir, 0766);
            chmod($dir, 0777);
            if(!is_writable($dir)) {
                throw new FileSystemException("目录 $dir 不可写");
            }
         }
    }
    function save_upload_img() {
        $files = array();
        $success = 0;
        foreach ($_FILES as $item) {
            $index = count($files);
            $files[$index]['srcName'] = $item['name'];    //上传图片的原名字
            $files[$index]['error'] = $item['error'];    //和该文件上传相关的错误代码
            $files[$index]['size'] = $item['size'];        //已上传文件的大小,单位为字节
            $files[$index]['type'] = $item['type'];        //文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"
            $files[$index]['success'] = false;            //这个用于标志该图片是否上传成功
            $files[$index]['path'] = '';                //存图片路径 
            
            if($item['error'] != 0) continue; // 接收过程有没有错误
            //判断图片能不能上传
            if(!is_uploaded_file($item['tmp_name'])) {
                $files[$index]['error'] = 8000;
                continue;
            } 
            $extension = '';//扩展名
            if(strcmp($item['type'], 'image/jpeg') == 0) $extension = '.jpg';
            else if(strcmp($item['type'], 'image/png') == 0) $extension = '.png';
            else if(strcmp($item['type'], 'image/gif') == 0) $extension = '.gif';
            else {
                //如果type不是以上三者,我们就从图片原名称里面去截取判断去取得(处于严谨性)    
                $substr = strrchr($item['name'], '.');
                if(FALSE == $substr) {
                    $files[$index]['error'] = 8002;
                    continue;
                }
                //取得元名字的扩展名后,再通过扩展名去给type赋上对应的值
                if(strcasecmp($substr, '.jpg') == 0 || strcasecmp($substr, '.jpeg') == 0 || strcasecmp($substr, '.jfif') == 0 || strcasecmp($substr, '.jpe') == 0 ) {
                    $files[$index]['type'] = 'image/jpeg';
                }
                else if(strcasecmp($substr, '.png') == 0)  $files[$index]['type'] = 'image/png';
                else if(strcasecmp($substr, '.gif') == 0) $files[$index]['type'] = 'image/gif';
                else {
                    $files[$index]['error'] = 8003;
                    continue;
                }
                $extension = $substr;
            }
            $md5= uniqid();//md5_file($item['tmp_name']);
            //取得图片的大小
            $imageInfo = getimagesize($item['tmp_name']);
            $rawImageWidth = $imageInfo[0];
            $rawImageHeight = $imageInfo[1];
            $path = './Upload/no_regular/'.date("Y-m-d")."/";
            $this->ensure_writable_dir($path);
            $name = $md5.$extension;
            move_uploaded_file($item['tmp_name'], $path.$name);
            $files[$index]['path'] = $path . $name;        //存图片路径
            $files[$index]['success'] = true;            //图片上传成功标志
            $files[$index]['width'] = $rawImageWidth;    //图片宽度
            $files[$index]['height'] = $rawImageHeight;    //图片高度
            $success ++;    //成功+1
        }
        echo json_encode(array(
            'total' => count($files),
            'success' => $success,
            'files' => $files
        ));
    } 

方法2: 做一个隐藏的表单上传(里面加了反斜杠,php代码是在tp框架下的)

<\div class="form-group"> <\label class="col-sm-4 control-label">*营业执照: <\div class="col-sm-6"> <\input type="button" class="btn btn-primary" value="上传" id="falseupload" style="width: 23%;position: relative;left: -4px;border-top-left-radius: 0px;border-bottom-left-radius: 0px;" /> <\input type="text" class="form-control" readonly name="corp_license_img" id="corp_license_img" style="width: 77%;float: left;border-right: 0px;" placeholder="未选择任何文件..." data-toggle="tooltip" data-placement="top"/> <\span class="btn-link btn-checkPhoto" id="see_edit_img" style="display:none;position: absolute;top: 10px;left: 283px;width: 100px;">查看图片 

 <\form id="formupload" style="display:none" enctype="multipart/form-data"> <\input type="file" id="trueupload" name="upload" value="上传">                 

$("#falseupload").click(function(){ $("#trueupload").click(); });

$("#trueupload").on("change",function(){ var uploadform =new FormData($("#formupload")[0]); $.ajax({ url:"{:U('UserCommon/fileUpload')}",type: "post",dataType:'json', timeout : 60*1000,processData: false,contentType: false, data:uploadform, success: function(d){ if(d.status==='ok'){ $("#show_img_url").attr("src",d.msg); $('#see_edit_img').css("display","block"); $("#corp_license_img").val(d.msg); }else{ layer.alert(d.msg, {skin: 'layui-layer-molv',closeBtn: 0}); } },error:function(msg){ console.log("error",msg); } }); });

function fileUpload(){
        $path="no_regular/".date("Y-m-d");
        foreach ($_FILES as $k=>$v) {
            $re=$this->uploadFile($v,$path);
        }
        $this->ajaxReturn($re);
    }
    function uploadFile($img,$path) {
        $upload = new \Think\Upload();
        $upload->rootPath ="./Upload/"; 
        $upload->subName=$path;
        $upload->mimes= C('mimes'); 
        $upload->maxSize= C('maxSize'); 
        $upload->exts= C('exts'); 
        $info = $upload->uploadOne($img);   
        if(!$info) return ['status'=>'no','msg'=>$upload->getError()]; 
        else  return ['status'=>'ok','msg'=>"/Upload/".$info['savepath'].$info['savename']];
    }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值