zoukankan      html  css  js  c++  java
  • 图片上传(二)

    这种方法需要提交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;
    }
  • 相关阅读:
    POJ3280Cheapest palindrome 经典dp
    hdu1257 最少拦截系统 LIS的应用
    代码着色 test
    Delphi 线程中的 Synchronize 和 临界区TCriticalSection 区别
    Delphi float浮点值转换整型int 方法
    Win.ini 介绍和配置结构
    Delphi Win API 打印函数 WriteProfileString
    Delphi ADOQuery 的Open和ExecSQL有什么区别
    SQL Server 中的 @、@@、#、## 、N 代表什么,以及SQL系统常用全局变量
    SQL 返回新增行的自增ID值方法
  • 原文地址:https://www.cnblogs.com/mingyue1818/p/4326526.html
Copyright © 2011-2022 走看看