spring-mvc整合jquery cropper图片裁剪插件

来源:互联网 发布:数据移植测试 编辑:程序博客网 时间:2024/06/07 05:07

spring-mvc整合jquery cropper图片裁剪插件

由于项目需要,最近两天都在研究sprigmvc整合jquery一款非常好用的图片裁剪插件---cropper。

在网上查找借鉴了一些资料,最终实现了效果。源代码下载地址: http://download.csdn.net/detail/u012759397/9679445

  • - (1) cropper.jsp(以下代码所需js和css可以去github上下载cropper-master.rar):
 <link rel="stylesheet" href="<%=path %>/resources/cropper/css/bootstrap.min.css">  <link rel="stylesheet" href="<%=path %>/resources/cropper/css/cropper.min.css">  <link rel="stylesheet" href="<%=path %>/resources/cropper/css/main.css">  <script src="<%=path %>/resources/cropper/js/jquery.min.js"></script>  <script src="<%=path %>/resources/cropper/js/bootstrap.min.js"></script>  <script src="<%=path %>/resources/cropper/js/cropper.min.js"></script>  <script src="<%=path %>/resources/cropper/js/main.js"></script><body>  <div class="container" id="crop-avatar">    <!-- Current avatar -->    <div class="avatar-view" title="Change the avatar">      <img src="<%=path %>/resources/cropper/img/picture.jpg" alt="Avatar">    </div>    <!-- Cropping modal -->    <div class="modal fade" id="avatar-modal" aria-hidden="true" aria-labelledby="avatar-modal-label" role="dialog" tabindex="-1">      <div class="modal-dialog modal-lg">        <div class="modal-content">          <form class="avatar-form" action="uploadHeadImage" enctype="multipart/form-data" method="post" accept="image/*">            <div class="modal-header">              <button type="button" class="close" data-dismiss="modal">&times;</button>              <h4 class="modal-title" id="avatar-modal-label">更改封面</h4>            </div>            <div class="modal-body">              <div class="avatar-body">                <div class="avatar-upload">                  <input type="hidden" class="avatar-src" name="avatar_src">                  <input type="hidden" class="avatar-data" name="avatar_data">                  <label for="avatarInput" class="btn btn-primary">选择图片</label>                  <input type="file" class="avatar-input" id="avatarInput" name="avatar_file" style="display: none;" accept="image/*">                </div>                <!-- Crop and preview -->                <div class="row">                  <div class="col-md-9">                    <div class="avatar-wrapper"></div>                  </div>                  <div class="col-md-3">                    <div class="avatar-preview preview-lg"></div>                    <div class="avatar-preview preview-md"></div>                    <div class="avatar-preview preview-sm"></div>                  </div>                </div>                <div class="row avatar-btns">                  <div class="col-md-9">                    <div class="btn-group">                     <button type="button" class="btn btn-primary" data-method="rotate" data-option="90" title="Rotate 90 degrees">旋转图片</button>                      <button type="button" class="btn btn-primary" data-method="rotate" data-option="15">15deg</button>                      <button type="button" class="btn btn-primary" data-method="rotate" data-option="30">30deg</button>                      <button type="button" class="btn btn-primary" data-method="rotate" data-option="45">45deg</button>                    </div>                  </div>                  <div class="col-md-3">                    <button type="submit" class="btn btn-primary btn-block avatar-save">提交</button>                  </div>                </div>              </div>            </div>            <!-- <div class="modal-footer">              <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>            </div> -->          </form>        </div>      </div>    </div><!-- /.modal -->    <!-- Loading state -->    <div class="loading" aria-label="Loading" role="img" tabindex="-1"></div>  </div></body>
  • (2)后台UploadImgController.java
@Controller@RequestMapping("/UploadDemo")public class UploadImgController {    @RequestMapping(value = "/uploadHeadImage",method = RequestMethod.GET)    public String uploadCropper(){        return "cropper";    }    @RequestMapping(value = "/uploadHeadImage",method = RequestMethod.POST, produces="text/html;charset=utf-8")    @ResponseBody      public String uploadCropper(            @RequestParam(value = "avatar_file",required=false) MultipartFile avatar_file,             String avatar_src,String avatar_data, HttpServletRequest request) {                System.out.println("==========Start=============");                String realPath = request.getSession().getServletContext().getRealPath("/");                String resourcePath = "/upload/image/";                //判断文件的MIMEtype                String type = avatar_file.getContentType();                if(type==null || !FileUploadUtil.allowUpload(type)) return  JSON.toJSONString(new Result(null,"不支持的文件类型,仅支持图片!"));                System.out.println("file type:"+type);                String fileName = FileUploadUtil.rename(avatar_file.getOriginalFilename());                int end = fileName.lastIndexOf(".");                String saveName = fileName.substring(0,end);                try {                    File dir = new File(realPath + resourcePath);                    if(!dir.exists()){                        dir.mkdirs();                    }                    File file = new File(dir,saveName+"_src.jpg");                    avatar_file.transferTo(file);                } catch (Exception e) {                    e.printStackTrace();                      return  JSON.toJSONString(new Result(null,"上传失败,出现异常:"+e.getMessage()));                }                   String srcImagePath = realPath + resourcePath + saveName;                JSONObject joData = (JSONObject) JSONObject.parse(avatar_data);                // 用户经过剪辑后的图片的大小                  float x = joData.getFloatValue("x");                float y = joData.getFloatValue("y");                float w =  joData.getFloatValue("width");                float h =  joData.getFloatValue("height");                float r = joData.getFloatValue("rotate");                //这里开始截取操作                System.out.println("==========imageCutStart=============");                ImgCut.cutAndRotateImage(srcImagePath, (int)x,(int) y,(int) w,(int) h,(int) r);                System.out.println("==========imageCutEnd=============");                    return  JSON.toJSONString(new Result(request.getSession().getServletContext().getContextPath()+resourcePath+saveName+"_cut.jpg","上传成功!"));  }}
  • (3)以上代码运行,在提交图片的时候用火狐的FireBug查看上传已成功,并且裁剪后的图片也存放在了项目路径下,但是页面会报Failed to response.

经过多次检查,在main.js中发现了问题.
原因就是当我上传图片成功后,后台会返回一个json串,由以下可知:
data: data,dataType: ‘json’, 知道,之后就会执行 :

 success: function (data) {      _this.submitDone(data); }
 submitDone: function (data) {      console.log(data);      if ($.isPlainObject(data) && data.state === 200) {        if (data.result) {          this.url = data.result;          if (this.support.datauri || this.uploaded) {            this.uploaded = false;            this.cropDone();          } else {            this.uploaded = true;            this.$avatarSrc.val(this.url);            this.startCropper();          }          this.$avatarInput.val('');        } else if (data.message) {          this.alert(data.message);        }      } else {        this.alert('Failed to response');      }    },

此时由以上js中的源代码可以知道问题就在此处.但是图片上传没问题,在项目路径下也可以找到裁剪后的图片,那么怎么会响应失败?百思不得其解。
又经过反复检查,最终用firebug调试,找出了问题。data.state === 200,没错就是这里的问题,在firebug下,返回的json串提示上传图片已经成功!但是并没有出现200 ok,于是我就把data.state === 200删除,在运行代码。没问题了。。。

  • (4)代码运行效果展示

上传的原图
上传之后的图片

0 0
原创粉丝点击