webuploader 百度上传组件

webuploader api 文档 http://fex.baidu.com/webuploader/doc/

在我们的项目中添加上传图片功能

原始页面如下



我们在原有的jsp上加上下面代码

(1)引入百度上传js css
<link rel="stylesheet" type="text/css"
    href="<%=basePath%>/plug-in/webuploader/js/webuploader.css">
    <script type="text/javascript"

        src="<%=basePath%>/plug-in/webuploader/js/webuploader.js"></script>

(2)调用百度上传组件

<script>

   var $ = jQuery, $list = $('#thelist'), state = 'pending', uploader;
          jQuery(function() {
                //判断是否是新增 若新增 这个id为空 若不是新增那么该人已经在系统存在 表示这个人已经上传过签名了 就显示他以前的签名照片
                var s=$("#id").val();
                if(s==null||s==""||s==undefined){
                }else{
                  $("#filelists").removeAttr("style");
                }
                

                uploader = WebUploader.create({
                    // swf文件路径
                    swf : '${webRoot}/plug-in/webuploader/js/Uploader.swf',
                    // 文件接收服务端。
                    server : 'uploadDataController.do?uploadQMPic',
                    // 不压缩image
                    resize : false,
                    //weifasle手动上传 true 选择就上传
                    auto:false,
                    //是否允许在文件传输时提前把下一个文件准备好。 对于一个文件的准备工作比较耗时,比如图片压缩,md5序列化。 如果能提前在当前文件传输期处理,可以节省总体耗时
                    prepareNextFile:false,
                    // 内部根据当前运行是创建,可能是input元素,也可能是flash.
                    pick : '#picker',
                    //是否要分片处理大文件上传。
                    chunked : false,
                    //多大分片chunkSize : 1014 * 1024,
                    //并发上传
                    threads : true,
                    // formData {Object} [可选] [默认值:{}]文件上传请求的参数表,每次发送都会发送此对象中的参数。
                    //验证文件总数量, 超出则不允许加入队列。
                    fileNumLimit : 10,
                    //验证单个文件大小是否超出限制, 超出则不允许加入队列。
                    fileSingleSizeLimit : 1000 * 1024 * 1024,
                    //去重 根据文件名字、文件大小和最后修改时间来生成hash Key.
                    duplicate : true,
                    //指定接受哪些类型的文件。 由于目前还有ext转mimeType表,所以这里需要分开指定。
                    accept: { title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*' } ,
                    thumb:{
                            width: 77,
                            height: 29,

                            // 图片质量,只有type为`image/jpeg`的时候才有效。
                            quality: 70,

                            // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false.
                            allowMagnify:false,

                            // 是否允许裁剪。
                            crop: true,

                            // 为空的话则保留原有图片格式。
                            // 否则强制转换成指定的类型。
                            type: 'image/jpeg'
                    }
            
                    
                });

                // 当有文件添加进来的时候
                uploader.on('fileQueued', function(file) {
                     var card = $("#idcard").val();
                       //alert(card);
                       if(card==null||card==""||card==undefined) {
                          $("#isfzjy").html("请先填写身份证号码");
                          $("#isfzjy").css("color","red");
                          $("#idcard").focus;
                          return false;
                       }
                
                   document.getElementById("picker").style.display='none';
                   document.getElementById("quxiao").style.display='block';
                   //删除原有的div
                    $("#pic").attr("style","display:none");
                    var $li = $( '<div id="' + file.id + '" class="file-item thumbnail">' + '<img>' + '<div class="info">' + file.name + '</div>' + '</div>' ), $img = $li.find('img');
                    // $list为容器jQuery实例
                    $("#thelist").append( $li );
                    // 创建缩略图 // 如果为非图片文件,可以不用调用此方法。 // thumbnailWidth x thumbnailHeight 为 100 x 100
                    uploader.makeThumb( file, function( error, src ) {
                        if ( error ) { $img.replaceWith('<span>不能预览</span>');
                        return;
                        }
                    //设置刚刚选着的照片的大小
                    $img.attr( 'src', src ); }, 77, 29 );
                    //alert($li);
                 
                   //$("#picker").css("display","none");
                   //上传文件列表显示
                  // $("#filelists").css("display","block");
                   $("#filelists").removeAttr("style");
                   //$("#fileurl").removeAttr("style");
                
                   
                  uploader.options.formData.picName = card;
                   uploader.upload();
                });
                
                
                // 文件上传过程中创建进度条实时显示。
                uploader.on(
                                'uploadProgress',
                                function(file, percentage) {
                                    var $li = $('#' + file.id), $percent = $li.find('.progress .progress-bar');
                                  
                                    // 避免重复创建
                                    if (!$percent.length) {
                                        $percent = $(
                                                '<div class="progress progress-striped active">'
                                                        + '<div class="progress-bar" role="progressbar" style="width: 0%">'
                                                        + '</div>' + '</div>')
                                                .appendTo($li)
                                                .find('.progress-bar');
                                    }

                                    $li.find('p.state').text('上传中');

                                    $("#progress_span").html((percentage*100).toFixed(2)+'%');
                                    //$percent.css('width', percentage * 100 + '%');
                                });
                uploader.on('uploadSuccess', function(file, response) {
                    if(0==response.success){
                      //alert(1);
                       $('#' + file.id).find('p.state').text('已上传');
                       setFileInfo(response.obj);
                    }else{
                        $('#' + file.id).find('p.state').text('上传失败!');
                    }    
                });
                uploader.on('uploadError', function(file, reason) {
                    //$('#' + file.id).find('p.state').text('上传出错');
                     swal('上传出错!');
                     document.location.reload();//当前页面  
                });
                uploader.on('uploadComplete', function(file) {
                    $('#' + file.id).find('.progress').fadeOut();
                });
                uploader.on('all', function(type) {
                    if (type === 'startUpload') {
                        state = 'uploading';
                    } else if (type === 'stopUpload') {
                        state = 'paused';
                    } else if (type === 'uploadFinished') {
                        state = 'done';
                    }
                });
                uploader.upload();
            });

        //上传成功回调 吧上传的图片地址 写到我们的jsp上,表单提交时候取这个div的值保存到表中

          function setFileInfo(data){
               //alert(data.filePath);
                  $("#picurl").val(data.filePath);
          }

//点击取消 时候 把刚刚上传的文件删掉

          function quxiao(){
              document.getElementById("picker").style.display='block';
              document.getElementById("quxiao").style.display='none';
              var s=$("#id").val();
              if(s==null||s==""||s==undefined){
                 //新建病人
                  $("#filelists").attr("style","display:none");
                  //获取刚刚上传的照片的绝对路径
                  var picurl=$("#picurl").val();
                  var bz=1;//新建病人时候删出身份证图片
                  $("#thelist").empty();
                  
                  //ajax 请求后台 删除上传文件
                   $.ajax({
                            type: "POST",                                         
                            url: "uploadDataController.do?delIdcardPic",           
                            dataType: "json",                                  
                            data: { url: picurl,bz: bz},      
                            success: function (data) {

                                //删出成功 把picurl值删出
                                $("#picurl").val("");                
                                }
                             
                        });
                 
              }else{
              //修改病人
              //原图片显示
              $("#pic").removeAttr("style");
               //新增图片隐藏
                $("#thelist").empty();
                var bz=2;
                var picurl=$("#picurl").val();
                 $.ajax({
                            type: "POST",                                         
                            url: "uploadDataController.do?delIdcardPic",           
                            dataType: "json",                                  
                            data: { url: picurl,bz: bz},      
                            success: function (data) {

                                //删出成功 把picurl值删出
                                //$("#picurl").val("");                
                                }
                             
                        });
              }
              
              
              
          }

</script>

jsp 添加代码

<tr>
                <td align="right" height="60px"><label class="Validform_label"> <t:mutiLang langKey="签名照片"/>: </label></td>
                <td class="value" >
                    <div id ="picker">选择文件</div>
                    <div id ="quxiao"  οnclick="quxiao()" style="width:83px;height:34px; background-color:#00b7ee; border-radius:3px; color:#ffffff; text-align:center; padding-top:10px; display:none;">取消选择</div>
                    
                </td>
            </tr>
            
            <tr id="filelists" style="display:none">
                <td align="right" ><label class="Validform_label"> <t:mutiLang langKey="签名照片浏览"/>: </label></td>
                <td class="value">
                    

                     <div id="thelist" class="uploader-list"> </div>

                         <!--用来存放我们图片的 ,当不是新增,是编辑时候,要显示图片-->

                      <div id="pic"><img src="data:image/png;base64,${imgPath}" width="77" height="29" /></div>  
                      
                </td>
            </tr>
            
            <tr id="fileurl"  style="display:none" >
                <td align="right" ><label class="Validform_label"> <t:mutiLang langKey="签名照片路径"/>: </label> </td>
                <td class="value">
                     <!--用来存放图片路径 -->
                     <div>
                        <input id="picurl" class="inputxt" name="picurl" value="${user.signatureFile}"/>
                     </div>
                </td>
            </tr>


在form表单提交时候

//判断是不是真增

var s=$("#id").val();
            var bz=3;
            var picurl=$("#picurl").val();
            if(s!=null&&s!=""&&s!=undefined){
                  //删除身份证文件夹中back的
                  $.ajax({
                        type: "POST",                                         
                        url: "uploadDataController.do?delIdcardPic",           
                        dataType: "json",                                  
                        data: { url: picurl,bz: bz},      
                        success: function (data) {              
                            }
                         
                    });
           
            };



java代码

@SuppressWarnings("unchecked")
    @RequestMapping(params = "uploadQMPic", method = { RequestMethod.POST,RequestMethod.GET })
    public void uploadQMPic(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws Exception {
        File targetFile = null;
        String msg = null;
        int code = 0;
        try {

            //找到文件存储路径 ,根据实际情况定义

             String realPath = FileGenerater.getPathUpload("qianming_pic");
            
              if(request.getParameter("chunk") == null) {
                    String fileName = System.currentTimeMillis()+"_"+file.getOriginalFilename();//存在硬盘上的文件名
                    if(fileName.length()>32){//修改文防止名字过长
                        fileName = fileName.substring(0,fileName.length());
                    }
                    targetFile = new File(realPath, fileName);//存在
                    file.transferTo(targetFile); // 小文件,直接拷贝
                }else{
                    int chunk = Integer.parseInt(request.getParameter("chunk")); // 当前分片
                    int chunks = Integer.parseInt(request.getParameter("chunks")); // 分片总计

                    String Ogfilename = file.getOriginalFilename();
                    targetFile = new File(realPath, Ogfilename);
                    OutputStream outputStream = new FileOutputStream(targetFile, true);
                    InputStream inputStream = file.getInputStream();

                    byte buffer[] = new byte[1024];
                    int len = 0;
                    while ((len = inputStream.read(buffer)) > 0) {
                        outputStream.write(buffer, 0, len);
                    }
                    inputStream.close();
                    outputStream.close();
               }
               if(FileCheckUtil.isDanger(targetFile)){
                    throw new Exception("非法文件!");
                }
            //操作成功  
            Map map = new HashMap();
            code = 0;
            msg = "success!";
            map.put("filePath", targetFile.getAbsolutePath());
            map.put("fileName", targetFile.getName());
            map.put("fileLength", targetFile.length());
            ResponseUtil.flushJson(response, new JsonRe(code,msg, map));
                
        }catch(Exception e){
            //操作失败
            e.printStackTrace();
            msg = e.getMessage();
            ResponseUtil.flushJson(response, new JsonRe(1,msg, null));
        }
   }


/**
     * 删除上传的图片
     * @param request
     * @param response
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    @RequestMapping(params = "delIdcardPic", method = { RequestMethod.POST,RequestMethod.GET })
    public void delIdcardPic(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String url=request.getParameter("url");
        String bz=request.getParameter("bz");
        if(bz.equals("1")){
            if(url!=null){
                File f= new File(url);
                if(f.exists()){
                    f.delete();
                }
            }
        }else if(bz.equals("2")){
            if(url!=null){
                File f= new File(url);
                if(f.exists()){
                    f.delete();
                    //String newurl=url.substring(0,url.indexOf("_back"));
                    String newurl=url+"_back";
                    System.out.println(newurl);
                    File  newf= new File(newurl);
                    if(newf.exists()){
                        newf.renameTo(new File(url));
                    }
                }
                    
            }
            
        }else{
            if(url!=null){
                url=url+"_back";
                File f=new File(url);
                if(f.exists()){
                    f.delete();
                }
            }
        }
    }

上面保存完上传的图片,并且把路径保存到相应的表中了,现在我们就要实现编辑用户时候,这个图要显示出来在上面的jsp代码里,

<div id="pic"><img src="data:image/png;base64,${imgPath}" width="77" height="29" /></div>

我实现的思路是 ,通过表里保存的路径 ,拿到2进制数据,转base64,传到前台。

java代码

 if(user.getSignatureFile()!=null&&!user.getSignatureFile().equals("")){
            File f = new File(user.getSignatureFile());
            FileInputStream input;
            try {
                input = new FileInputStream(f);
                byte[] buffer = new byte[(int) f.length()];
                input.read(buffer);
                input.close();
                //System.out.println(Base64.byteArrayToBase64(buffer));
                req.setAttribute("imgPath", Base64.byteArrayToBase64(buffer));
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
        }



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值