spring 上传多图片

前端部分

//可使用FormData 携带file进行上传
var formdata = new FormData();
var imageInfos = [];
//上传多
$.each($(".myupload"),function(n,item){
    var file = $(uploadFile).get(0).files[0];
    //只上传图片
    if (file.type.match("image.*")) {
        formdata.append("file"+n, file);
        //携带 图片的一些额外信息
        var imageInfo = {"sort":n, "link":link, "product":product};
        imageInfos.push(imageInfo);
    }   
});
//使用JSON.stringify 转成JSON字符串,否则后端接收的是[object Object]
formdata.append("imageInfos", JSON.stringify(imageInfos));

然后使用ajax 请求,不废话了!

后端部分

Controller层

@ResponseBody
    @RequestMapping(value="operdesigncarousel.htm", method=RequestMethod.POST)
    public Map<String, Object> uploadDemo(HttpServletRequest request,HttpServletResponse response) {
        Map<String, Object> paraMap = requestUtil.getParaMap(request);
        Map<String, Object> resultMap = new HashMap<String, Object>();
        Map<String, Object> saveFile = FileUploadUtil
                    .multipartUpload(request, "\\ecommerce\\design");
        int ret = Integer.parseInt(saveFile.get("ret").toString());
        if(ret > 0) {
            return service.add(paraMap);
        }                   
        resultMap.put("ret", -1);
        resultMap.put("desc", saveFile.get("desc"));
        return resultMap;
    }

Tomcat 配置虚拟路径
在D:\apache-tomcat-8.5.5\conf\Catalina\localhost新建一个 名和path相同的xml文件如:这里写图片描述
这里写图片描述

一个基于spring 的 fileupload 工具

/**
     * TODO<br/>
     * @param request
     * @param savePath 例如:根目录(D:\apache-tomcat-8.5.5\webapps\erp-crm) + 保存目录(\crm\mall\design) + 文件名   (demo.png) 
     * @param isSaveInProject true 保存在webapp 项目下, 重新部署会清空, false 根目录为对应tomcat目录
     * @param isNewFileName true 生成新文件名   格式为  yyyyMMddHHmmss(0++ 防止多上传同名).suffix
     * @return Map 包含 ret -1 失败; desc 描述; pathList 文件url列表
     */
    public static Map<String, Object> multipartUpload(HttpServletRequest request, 
            String savePath, boolean isSaveInProject, boolean isNewFileName) {
        MultipartHttpServletRequest mulRequest = (MultipartHttpServletRequest) request;
        Map<String, Object> result = new HashMap<String, Object>();
        List<String> pathList = new ArrayList();
        StringBuilder builder = new StringBuilder();
        Map<String, MultipartFile> fileMap = mulRequest.getFileMap();
        //null 判断
        if(fileMap == null || fileMap.isEmpty()) {
            result.put("ret", "-1");
            result.put("desc", "上传文件不存在");
            return result;
        }
        //项目路径 webapp 下,重新部署会清空
        String projectPath = mulRequest.getSession().getServletContext().getRealPath("/");
        String dirPath = System.getProperty("catalina.home");
        //循环fileMap
        int count = 0;
        for(String key : fileMap.keySet()){
            MultipartFile file = fileMap.get(key);
            String filename = file.getOriginalFilename();
            //判断是否存在webapp 项目下
            if(isSaveInProject){
                dirPath = projectPath;
            }
            //目录不存在,创建
            File dirPathFile = new File(dirPath+savePath);
            if (!dirPathFile.exists()) {
                dirPathFile.mkdirs();
            }
            //判断是否生成新文件名
            if(isNewFileName){
                filename = getNewFileName(filename, count);
                count++;
            }
            String filePath = savePath + File.separatorChar + filename;
            File saveFile = new File(dirPath+ File.separatorChar +filePath);

            try {
                file.transferTo(saveFile);
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            builder.append(filePath).append("&");       
            pathList.add(filePath);
        }
        builder.deleteCharAt(builder.length()-1);
        result.put("filePath", builder.toString());
        result.put("pathList", pathList);
        result.put("ret", 1);
        result.put("desc", "上传成功");
        return result;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值