java端同时获取批量上传图片及其他数据

Controller层:
@ResponseBody
     @RequestMapping(value = "", method = RequestMethod.POST)
     public JSONObject addTroubleTicket(HttpServletRequest request,
                                        @RequestParam(value="accessToken",required=true)String accessToken,
                                        TroubleTicket troubleTicket,
                                        @RequestParam(value="file",required=false) MultipartFile[] images) throws Exception{
        troubleTicketReportService.addTroubleTicket(troubleTicket, images, accessToken);
        return returnSuccess();
    }
ps:图片表单提交,所以不能用@RequestBody接收参数,可以用对象接收。




Service层:
@Service("troubleTicketReportImpl")
public class TroubleTicketReportImpl implements TroubleTicketReportService{

    @Resource(name="troubleTicketDaoImpl")
    private TroubleTicketDao  troubleTicketDao;

    @Resource(name="electrombileDaoImpl")
    private ElectrombileDao electrombileDao;

    private final String upload_img_root = PropertiesUtil.getStringValue("upload_root");

    private final String upload_img_report_dir = PropertiesUtil.getStringValue("upload_img_report_dir");

    private final String upload_img_report_url = PropertiesUtil.getStringValue("upload_img_report_url");

    //文件最大值 kb,默认1024kb
    private final Integer max_img_size =PropertiesUtil.get("trouble_max_img_size", 1024);

    @Override
    public void addTroubleTicket(TroubleTicket ttk,MultipartFile[] images,String accessToken) {
        String electrombileCode = ttk.getElectrombileCode();
        ValidUtil.valid("车辆编码", electrombileCode, "{'required':true,'regex':'" + RegexConstants.NUM_10_PATTERN + "'}");

        String remark = ttk.getRemark();
        if(remark != null && remark != ""){
            ValidUtil.valid("备注", remark, "{'required':false,'regex':'" + RegexConstants.STRING_0_300_PATTERN + "'}");
        }

        String reportContent = ttk.getReportContent();
        if(reportContent != null && reportContent != ""){
            ValidUtil.valid("故障内容", reportContent, "{'required':false,'regex':'" + RegexConstants.STRING_0_300_PATTERN + "'}");
        }

        String types = ttk.getTroubleType();
        if(types.isEmpty() || types ==null){
            throw new BizException("E1000022", MessageUtil.getMessage("E1000022","维修类型"));//维修类型不存在
        }
        if(types.contains(",")){
            String[] type = types.split(",");
            for(String t :type){
                if(null==TroubleType.contains(Integer.valueOf(t))){
                    throw new BizException("E1000015", MessageUtil.getMessage("E1000015","维修类型"));
                }
            }
        }else {
            if(null==TroubleType.contains(Integer.valueOf(types))){
                throw new BizException("E1000015", MessageUtil.getMessage("E1000015","维修类型"));
            }
        }


        Electrombile electrombile = new Electrombile();
        electrombile.setElectrombileCode(electrombileCode);
        List<Electrombile> elist =  electrombileDao.queryListByParams(electrombile,1,10);
        if(elist.size() ==0 || elist == null || elist.size() > 1){
            throw new BizException("E1000022", MessageUtil.getMessage("E1000022","车辆信息"));//车辆信息不存在
        }

        //查看status=0,1,2,3的数据有几条
        TroubleTicket troubleTicket = new TroubleTicket();
        troubleTicket.setElectrombileCode(electrombileCode);
        int size = troubleTicketDao.selectCountByStatus(troubleTicket);
        if(size > 0){
            throw new BizException("E1000014", MessageUtil.getMessage("E1000014","报修信息"));//报修信息存在
        }

        String reportPhoto = "";
        if(images != null && images.length!=0){
            reportPhoto = saveImages(images);
        }

        AppUserDTO usrDto = KeyUtil.getAppUserByAccessToken(accessToken);
        AppUser user = usrDto.getUserInfo();
        Integer subscriberId =  user.getId();//用户ID

//        ttk.setTicketCode(String.valueOf(System.currentTimeMillis()));//工单编号

        ttk.setId(null);
        ttk.setReportDate(new Date());
        ttk.setReportPhoto(reportPhoto);
        ttk.setSubscriberId(subscriberId);
        ttk.setStatus(0);
        troubleTicketDao.insertSelective(ttk);
    }


    @Override
    public TroubleTicket queryByElectrombileCode(String accessToken) {
        AppUserDTO usrDto = KeyUtil.getAppUserByAccessToken(accessToken);
        AppUser user = usrDto.getUserInfo();
        String electrombileCode = user.getElectrombileCode();
        TroubleTicket ttk = troubleTicketDao.selectByElectrombileCode(electrombileCode);
        return ttk;
    }


    private String saveImages(MultipartFile[] images) {

        //当前时间 的 年月日路径    2017/06/27
        String folderpath = DateUtil.getToday();
        //如果不是以/ 结尾 添加斜杠/   /smart-lease-pub/imgreport --> /smart-lease-pub/imgreport/
        String uploadImgReportDir = upload_img_report_dir;
        if(!upload_img_report_dir.endsWith("/")){
            uploadImgReportDir +="/";
        }

        StringBuilder urls = new StringBuilder();

        //最多只能上传4张报修图片
        if(images.length>4) {
            throw new ValidException("E1000017", MessageUtil.getMessage("E1000017","图片张数"));
        }

        for(MultipartFile image : images){

            // 文件类型校验 image jpeg bmp.
            String contentType = image.getContentType();
            if(!StringUtils.isBlank(contentType)){
                if (contentType.equals("image/jpeg") || contentType.equals("image/png")
                        || contentType.equals("image/bmp")) {
                } else {
                    throw new ValidException("E1000015", MessageUtil.getMessage("E1000015","图片类型"));//图片类型不合法
                }
            } else {
                throw new ValidException("E1000013", MessageUtil.getMessage("E1000013","图片类型"));   //图片类型不允许为空
            }

            //文件大小校验
            if(image.getSize() == 0){
                throw new ValidException("E1000013", MessageUtil.getMessage("E1000013","图片内容"));
            }

            //文件大小大于配置最大值
            long fileSize = image.getSize();
            if(fileSize > max_img_size*1024){
                throw new ValidException("E1000031", MessageUtil.getMessage("E1000031", new Object[]{"图片大小",max_img_size*1024}));
            }

            //图片保存路径和访问URL不能为空
            if(StringUtils.isBlank(upload_img_report_dir) || StringUtils.isBlank(upload_img_report_url)){
                throw new ValidException("E1000013", MessageUtil.getMessage("E1000013","图片保存路径和访问URL"));
            }


            String fileName = System.currentTimeMillis() + RandomUtil.getRandomNumber(4) + ".png"; //时间戳 + 四位随机数
            //文件完整路径示例 : /service/media/smart-lease-pub/imgreport/2018/12/12/xxxxxx.png
            String path = upload_img_root + uploadImgReportDir + folderpath + "/" ;
            File dir = new File(path);
            if(!dir.exists()){
                dir.mkdirs();
            }
            path += fileName;
            File newFile=new File(path);
            try {
                image.transferTo(newFile);
            }catch(Exception e) {
                throw new BizException("E1000038", MessageUtil.getMessage("E1000038","保存图片"));
            }
            String url = upload_img_report_url + uploadImgReportDir + folderpath + "/" + fileName;

            urls.append(url);
            urls.append(Constants.URL_SPLIT);//多个用|分割
        }
        return urls.substring(0,urls.length()-1);//去掉最后一个分隔符
    }




}
原文地址:https://www.cnblogs.com/weihuang6620/p/11023243.html