Spring利用MultipartFile接收FormData对象上传文件(可接收AJAX上传的包含多文件的复杂表单内容)

来源:互联网 发布:em算法 q函数 编辑:程序博客网 时间:2024/06/06 04:36

goodsController

/** * 添加新的Goods * @param httpSession sessionUser * @return resMap: 成功msg==>"ok" / 失败 error==>错误信息 */@RequestMapping(value = "/addGoods", method = RequestMethod.POST)@ResponseBodypublic Map<String, Object> add(HttpServletRequest request,            @RequestParam(value="goodsPic",required = false) MultipartFile[] goodsPics,//商品详情图,单文件、多文件都可            HttpSession httpSession) {      Map<String, Object> resMap = new HashMap<String, Object>();      try {            String goodsIdStr = request.getParameter("godosId");            //XXX表单其他数据的处理            System.out.println("goodsPics"+(goodsPics==null?">无":(goodsPics.toString()+",文件数"+goodsPics.length)));            goodsImgService.saveGoodsImgs(goodsPics, Long.valueOf(goodsIdStr));//保存图片            resMap.put("msg", "ok");      } catch (Exception e) {            e.printStackTrace();            resMap.put("error", "提交商品出错"+e.getMessage());      }      return resMap;}

goodsImgService

/** * 保存多张图片 * @param goodsPics * @param goodsId 商品ID * @author Nifury */@Transactional(rollbackFor={IllegalStateException.class,IOException.class,SQLException.class,RuntimeException.class})public void saveGoodsImgs(MultipartFile[] goodsPics, long goodsId) throws IllegalStateException, IOException {      if(goodsPics==null || goodsPics.length<=0){//数组无图片            return;      }      for (MultipartFile multipartFile : goodsPics) {            System.out.println("准备处理:"+(multipartFile==null?">无":(multipartFile.getOriginalFilename()+",大小"+multipartFile.getSize())));            this.saveImg(multipartFile, goodsId);      }}/** * 保存单张图片 * @param multipartFile * @param goodsId 商品ID * @author Nifury */private void saveImg(MultipartFile multipartFile, long goodsId) throws IllegalStateException, IOException {      if(multipartFile!=null && multipartFile.getSize()>0){//有图            String originalFilename = multipartFile.getOriginalFilename();            if( !(originalFilename.endsWith(".jpg") || originalFilename.endsWith(".jpeg")                  || originalFilename.endsWith(".png") || originalFilename.endsWith(".gif")) ){                  throw new RuntimeException("图片格式不正确==>"+originalFilename);            }            String GOODS_PIC_DIR = "XXX/images/goods/s/";//商品图片            File dir = new File(GOODS_PIC_DIR  +goodsId+"/");            if (!dir.exists()) {//目录不存在则创建目录            dir.mkdir();        }            String newFilename = (long)(Math.random()*1000000)                        +originalFilename.substring(originalFilename.lastIndexOf("."));            System.out.println("保存图片"+originalFilename);            multipartFile.transferTo(new File(GOODS_PIC_DIR  +goodsId+"/"+newFilename));//保存文件            System.out.println("已保存");            GoodsImg goodsImg = new GoodsImg();//数据存储到数据库            goodsImg.setGoodsId(goodsId);            goodsImg.setImgUrl(newFilename);            goodsImgDao.insert(goodsImg);      }}

参考资料:
JQuery Ajax使用FormData对象上传文件(图片)
http://m.blog.csdn.net/article/details?id=52330280

0 0