SpringMvc 图片上传功能

因为工作中有遇到图片文件上传功能,所以随手简单记录下,


1.首先前端页面打包文件

1).jsp页面代码:

 	<form action="/backImage.do" method="post" enctype="multipart/form-data">
	     选择文件:<input type="file" name="file">
	     <input type="submit" value="上传"> 
	</form>

2.设置applicationContext.xml 中限制上传文件的大小

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
   <property name="maxUploadSize" value="10485760"/>
   <property name="defaultEncoding" value="utf-8"/>
</bean>


3.Controller接口:单张图片上传及多张图片上传

1.单张图片上传:

@Transactional
   @ResponseBody
   @RequestMapping(value = "backImage.do", method = {RequestMethod.POST })
   public JSONObject backImage(@RequestParam MultipartFile file,
         @RequestParam Map<String,String> map,
         HttpServletRequest request, HttpServletResponse response,
         HttpSession session){
      logger.info("进入背景图上传接口.....");
      JSONObject jsonMap = JSONObject.parseObject(map.get("Data"));
      JSONObject js = new JSONObject();
      JSONObject resultJs = new JSONObject();
      String uuid = "";
      // 保存文件
      try {
         js = ImgUpload.imgUp(file, request, response, session,"/hzimgs");
         logger.info("背景图上传服务器成功.....");
         if(js.getBooleanValue("flag")){
            //上传成功,先用手机号码查询用户ID判断该用户是否有上传过log,有就更新,没有就新增.
            Map<String,Object> userMap = new HashMap<String,Object>();
            userMap.put("userPhone", jsonMap.getString("mobilePhone"));
            System.out.println(jsonMap.getString("mobilePhone"));
//          userMap.put("userPhone", "18601");
            SysUser sysUser = regDao.findUserForCon(userMap);
            boolean identityIdExists =false;
         
            //user identity_id 存在则不使用新的identity_id
            if(sysUser.getIdentityId()!=null){
               if(sysUser.getIdentityId().length()>0){
                  identityIdExists = true;
               }
            }
            if(identityIdExists){
            uuid =sysUser.getIdentityId();
            }else{
                uuid = SoleCode.getGUID();
                regDao.upIdentityForPhone(sysUser.getUserPhone(), uuid);
            }
            
            Map<String,Object> findMap = new HashMap<String,Object>();
            findMap.put("identity_id", uuid);
            findMap.put("type", "HzBack");
            SysImgs sysImg = null;
            try {
               sysImg = imgDao.findImgForCon(findMap);
            } catch (Exception e){
               resultJs = this.getJsonData("", "上传图片查找对象失败!", false, js);
            }
               if(sysImg == null){
                  //新增
                  Map<String,Object> addMap = new HashMap<String,Object>();
                  SysImgs img = new SysImgs();
                  img.setCreateTime(new Date());
                  img.setCreateUser(sysUser.getId());
                  img.setFileName(js.getString("fileName"));
                  img.setIdentityId(uuid);
                  img.setIsDel(0);
                  img.setPath(js.getString("path"));
                  img.setReason("");
                  img.setStatus(0);
                  img.setType("HzBack");
                  img.setUpdateTime(null);
                  img.setUpdateUser(0);
                  addMap.put("img", img);
                  try{
                     imgDao.addImg(addMap);
                     logger.info("背景图上传数据库成功.....");
                     resultJs = this.getJsonData("","OK",true,js);
                  } catch (Exception e){
                     resultJs = this.getJsonData("","图片新增失败!",false,js);
                  }
               } else {
                  //更新TODO
                  Map<String,Object> updateMap = new HashMap<String,Object>();
                  updateMap.put("fileName", js.getString("fileName"));
                  updateMap.put("path", js.getString("path"));
                  updateMap.put("updateUser", sysUser.getId());
                  updateMap.put("updateTime", new Date());
                  updateMap.put("createUser", sysUser.getId());
                  updateMap.put("imgType", "HzBack");
                  try{
                     imgDao.updateImg(updateMap);
                     ImgDelectFile.deleteFileOrDirectory(request,sysImg.getFileName(), sysImg.getPath());
                     logger.info("更新背景图上传数据库成功.....");
                     resultJs = this.getJsonData("", "OK", true, js);
                  } catch(Exception e){
                     resultJs = this.getJsonData("", "logo更新失败!", false, js);
                  }
               }
            
         } else {
            //上传失败
            resultJs = this.getJsonData("", "图片读取上传失败!", false, js);
            
         }
      } catch (IllegalStateException e) {
         resultJs = this.getJsonData("", "图片读取失败!", false, js);
         
      } catch (IOException e) {
         resultJs = this.getJsonData("", "图片读取失败!", false, js);
      }
      logger.info("背景图上传  the end.....");
      return resultJs;
   }

2).多张图片上传:

@Transactional
   @ResponseBody
   @RequestMapping(value="sendArticle.do", method={RequestMethod.POST,RequestMethod.GET})
   public JSONObject sendArticle(@RequestParam Map<String,String> map,
         @RequestParam MultipartFile[] file,
         HttpServletRequest request, HttpServletResponse response,
         HttpSession session)
               throws IllegalStateException, IOException{
      logger.info("进入朋友圈消息接口.............");
      JSONObject jsonMap = JSONObject.parseObject(map.get("Data"));
      SysFriends sf = new SysFriends();
      JSONObject jsonObj = new JSONObject();
      Long friendId = 0L;//发表动态的id
      String uuid = SoleCode.getGUID();
      String content = jsonMap.getString("content");
      String phone = jsonMap.getString("mobilePhone");
//    String content = request.getParameter("content");
//    String phone = "18601";
      logger.info("进入朋友圈消息接口 数据解析成功............."+jsonMap+"....phone=="+phone);
      //前端还需要发送登录者的信息,根据手机号查找用户ID
      Map<String,Object> userMap = new HashMap<String,Object>();
      userMap.put("userPhone", phone);
      SysUser sysUser = regDao.findUserForCon(userMap);
      logger.info("查询数据............"+sysUser.toString());
      //插入朋友圈表
      if(sysUser != null){
         Map<String,Object> sfMap = new HashMap<String,Object>();
         sf.setContent(content);
         sf.setCreateTime(new Date());
         sf.setCreateUser(sysUser.getId());
         sf.setErpId(Integer.parseInt(jsonMap.getString("erpId")));

         sf.setErpId(1);
         sf.setIdentityId(uuid);
         sf.setIsDel(0);
         sf.setSource(null);
         sf.setSysUserId(sysUser.getId());
         sf.setUpdateTime(null);
         sf.setUpdateUser(0);
         sf.setStatus(0);
         sf.setReason("");
         sfMap.put("sf", sf);
         logger.info("插入朋友圈消息start.............");
         try{
            sfDao.addFriendArticle(sfMap);
            friendId = (Long) sfMap.get("id");//每一条动态的ID
            sf.setId(friendId.intValue());
            logger.info("插入朋友圈消息成功.............");
         } catch(Exception e){
//          jsonObj.put("MSG_CODE", "发表动态失败!");
//          jsonObj.put("Data","");
//          jsonObj.put("Result", false);
            jsonObj = this.getJsonData("", "发表动态失败!", false, jsonObj);
            logger.info("插入朋友圈消息失败.............");
            return jsonObj;
         }
      }

这里多张图片上传功能做的是一个朋友圈的发表心情动态的功能。


说明:这里包含了Mybatis对数据库操作,你们可以自己攫取所需要的东西。另外 :@RequestParam MultipartFile file 这种写法可以与android端适用,

如果写成:@RequestParam(value="file") MultipartFile file  这样写针对web端是没有任何问题的,但针对移动端就会有问题,移动端请求会进不来。


4.imgUp:上传图片至服务端的工具类---->这里分为多张图片上传与单张图片上传的工具类

1.单张图片上传:

public static JSONObject imgUp(MultipartFile file, HttpServletRequest request,
      HttpServletResponse response, HttpSession session,String filepath) throws IllegalStateException, IOException {
   JSONObject js = new JSONObject();
   
   if(file != null){
      String path = null;//文件路劲
      String type = null;//文件类型
      String fileName = file.getOriginalFilename();//文件名
      type = fileName.indexOf(".") != -1?fileName.substring(fileName.lastIndexOf(".")+1,fileName.length()):null;
      if(type != null){
         if("GIF".equals(type.toUpperCase())||"PNG".equals(type.toUpperCase())||"JPG".equals(type.toUpperCase())){
            // 项目在容器中实际发布运行的根路径
                  String realPath= request.getSession().getServletContext().getRealPath("/").concat("../slswappfiles")+filepath;
                  System.out.println(realPath);
               // 自定义的文件名称
                     String trueFileName =new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+fileName;
                  // 设置存放图片文件的路径
                   path=realPath+System.getProperty("file.separator")+trueFileName;
                   System.out.println("存放图片文件的路径:"+path);
                   File targetFile = new File(realPath,trueFileName);
                   if (!targetFile.exists()) {
                       targetFile.mkdirs();
                   }
                    // 转存文件到指定的路径
                    file.transferTo(targetFile);
                   
                    js.put("path", "/slsw"+filepath+"/");
                    js.put("fileName", trueFileName);
                    js.put("flag", true);
         }else {
                   System.out.println("不是我们想要的文件类型,请按要求重新上传");
                   js.put("flag", false);
                   return js;
                }
      }else{
           System.out.println("文件类型为空");
           js.put("flag", false);
                return js;
      }
   }else {
           System.out.println("没有找到相对应的文件");
           js.put("flag", false);
           return js;
          }
   return js;
}

  这里只提供本人项目所用的东西,你们只要截取你们所需就ok


2.多张图片上传:

public static JSONObject imageUploa(MultipartFile[] file,
      HttpServletRequest request, HttpServletResponse response,
      HttpSession session)
      throws IllegalStateException, IOException {
   JSONObject jsonObj = new JSONObject();
   JSONObject js = new JSONObject();
   List<SysImgs> list = new ArrayList<SysImgs>();
   SysImgs sImg = null;
   // String images = imageUtil.ImageUpload(file,
   // request,response,session);
   if (file != null && file.length > 0) {
      // 循环获取file数组中得文件
      for (int i = 0; i < file.length; i++) {

         MultipartFile files = file[i];
           
         // 保存文件
         jsonObj = ImgUpload.imgUp(files, request, response,
               session,"/upload");
         
         if(jsonObj.getBooleanValue("flag")){
            sImg = new SysImgs();
            sImg.setPath((String) jsonObj.get("path"));
            
            sImg.setFileName((String) jsonObj.get("fileName"));
            
            System.out.println((String) jsonObj.get("fileName"));
            list.add(sImg);
            
         } else {
            
            continue;
         }
         
      }
      js.put("list", list);
   }
   return js;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值