图片上传(二)

这种方法需要提交form表单,再跳转页面(没有第一种方法好):

一、JSP代码:

<div class="tphoto" name="head_img" id="head_img">
    <input type="file" name="file" onchange="previewImage(this)" />
    <div id="preview">
        <img id="imghead" border=0 src='${ctx}/static/images/elearning/photo_teacher.png'>
    </div>
</div>


二、JS代码:

//图片上传
    function previewImage(file) {
          var MAXWIDTH  = 100;
          var MAXHEIGHT = 100;
          var div = document.getElementById('preview');
          if (file.files && file.files[0]){
              div.innerHTML = '<img id=imghead>';
              var img = document.getElementById('imghead');
              img.onload = function(){
                    var rect = clacImgZoomParam(MAXWIDTH, MAXHEIGHT, img.offsetWidth, img.offsetHeight);
                    img.width = rect.width;
                    img.height = rect.height;
                    img.style.marginLeft = rect.left+'px';
                    img.style.marginTop = rect.top+'px';
              }
              var reader = new FileReader();
              reader.onload = function(evt){img.src = evt.target.result;}
              reader.readAsDataURL(file.files[0]);
          } else {
            var sFilter='filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src="';
            file.select();
            var src = document.selection.createRange().text;
            div.innerHTML = '<img id=imghead>';
            var img = document.getElementById('imghead');
            img.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = src;
            var rect = clacImgZoomParam(MAXWIDTH, MAXHEIGHT, img.offsetWidth, img.offsetHeight);
            status =('rect:'+rect.top+','+rect.left+','+rect.width+','+rect.height);
            div.innerHTML = "<div id=divhead style='"+rect.width+"px;height:"+rect.height+"px;margin-top:"+rect.top+"px;margin-left:"+rect.left+"px;"+sFilter+src+""'></div>";
          }
    }
    
    function clacImgZoomParam( maxWidth, maxHeight, width, height ){
        var param = {top:0, left:0, width, height:height};
        if( width>maxWidth || height>maxHeight ) {
            rateWidth = width / maxWidth;
            rateHeight = height / maxHeight;
            
            if( rateWidth > rateHeight ) {
                param.width =  maxWidth;
                param.height = Math.round(height / rateWidth);
            } else {
                param.width = Math.round(width / rateHeight);
                param.height = maxHeight;
            }
        }
        
        param.left = Math.round((maxWidth - param.width) / 2);
        param.top = Math.round((maxHeight - param.height) / 2);
        
        return param;
    }


三、后台Java代码:

/**
     * 
     * @Title: insert 
     * @Description: 新增 
     * @param @param params
     * @param @param request
     * @param @return
     * @return MessageResp
     * @throws
     */
    @RequestMapping("/insert")
    public ModelAndView insert(Model model, TrainerQueryParam params, HttpServletRequest request, MultipartFile file) {
        ModelAndView view = new ModelAndView();
        User u = SessionUtils.getUser(request.getSession());

        /**
         * 把前端传过来的参数对象中要更新的属性转到model实体类相应的字段属性中, 可以通过通用的转化实现
         * */
        Trainer trainer = new Trainer();
        
        try {
            BeanUtils.copyProperties(trainer, params);//前面的是目标,后面的是源对象
        } catch (IllegalAccessException e) {
            throw new AjaxBusinessException("新增出错!");
        } catch (InvocationTargetException e) {
            throw new AjaxBusinessException("新增出错!");
        }
        
        trainer.setId(UUIDUtil.getUUID()); //ID
        trainer.setCorpId(SessionUtils.getCorpId(request.getSession()));
        
        try {
           
            if(!file.isEmpty()){
                //获得工程下面upload资源包路径,当然这个包是已经存在的了
                String path = request.getSession().getServletContext().getRealPath("upload/trainer_picture");
                
                //上传的图片的名称
                String fileName = file.getOriginalFilename();
                String newfileName = UUIDUtil.generateGUID() + fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
                
                //下面是upload路径盘符的转化        
                StringBuffer importPath = new StringBuffer();
                String temp[] = path.split("\\");
                
                for (int i = 0; i < temp.length; i++) {
                    importPath.append(temp[i]);
                    importPath.append("/");
                }
                
                importPath.append(newfileName);
                //看是否存在upload包,没有则会新建一个upload包,作为资源上传的路径
                File targetFile = new File(path, newfileName);
                if (!targetFile.exists()) {
                    targetFile.mkdirs();
                }
                
                //文件上传
                file.transferTo(targetFile);
                
                trainer.setHeadImg(newfileName);
            }
            
            if (trainerService.insert(trainer) == 1) {
                resp.setResult("true");
                resp.setResultDesc("新增成功!");
            }
        } catch (Exception e) {
            resp.setResult("false");
            resp.setResultDesc("新增出错!");
        }
        
        //model.addAttribute("trainerResp", trainerResp);
      //model.addAttribute("srList", srList);
  
     view.setViewName("views/xxx/manage/xxxinfo");
  
     return view;
}
原文地址:https://www.cnblogs.com/mingyue1818/p/4326526.html