• spring-boot上传文件MultiPartFile获取不到文件问题解决


    1.现象是在spring-boot里加入 commons-fileupload jar并且配置了mutilPart的bean,在upload的POST请求后,发现

    multipartRequest.getFiles("file")=null,有点奇怪,查了文档资料才解决。
     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="maxUploadSize" value="104857600"/>
            <property name="maxInMemorySize" value="4096"/>
        </bean>

    2.原因是:spring-boot自带的org.springframework.web.multipart.MultipartFile
    和Multipart产生冲突,如果同时使用了MultipartResolver 和ServletFileUpload,就会在iter.hasNext()返回false.然后整个循环就跳出去了。整个问题产生的原因是Spring框架先调用了MultipartResolver 来处理http multi-part的请求。这里http multipart的请求已经消耗掉。后面又交给ServletFileUpload ,那么ServletFileUpload 就获取不到相应的multi-part请求。因此将multipartResolve配置去除,问题就解决了。

    3. 单文件的话只需要一个变量即,多文件上传的话就将MultipartFile改为数组,然后分别上传保存即可。

    @RequestMapping(value="/multipleSave", method=RequestMethod.POST )
        public @ResponseBody String multipleSave(@RequestParam("file") MultipartFile[] files){
            String fileName = null;
            String msg = "";
            if (files != null && files.length >0) {
                for(int i =0 ;i< files.length; i++){
                    try {
                        fileName = files[i].getOriginalFilename();
                        byte[] bytes = files[i].getBytes();
                        BufferedOutputStream buffStream = 
                                new BufferedOutputStream(new FileOutputStream(new File("/tmp/" + fileName)));
                        buffStream.write(bytes);
                        buffStream.close();
                        msg += "You have successfully uploaded " + fileName";
                    } catch (Exception e) {
                        return "You failed to upload " + fileName + ": " + e.getMessage();
                    }
                }
                return msg;
            } else {
                return "Unable to upload. File is empty.";
            }
        }
    }

    4.spring-boot 配置上传文件和请求文件的最大值限制:
    直接在application.properties中
    multipart.maxFileSize=128KB
    multipart.maxRequestSize=128KB

    5. spring-boot-starter-web are already added as dependencies. To upload files with Servlet containers, you need to register aMultipartConfigElement class (which would be <multipart-config> in web.xml). Thanks to Spring Boot, everything is auto-configured for you! spring-boot-upload链接

  • 相关阅读:
    4、自定义菜单
    3、关注、取消关注 与 关键字回复
    2、自动回复消息
    1、接入公众平台
    java学习备忘录
    vue组件最佳实践
    js拉起或下载app
    angular1.5 Components
    Charlse 使用小记
    2016年终总结
  • 原文地址:https://www.cnblogs.com/shisanye/p/14864763.html
Copyright © 2020-2023  润新知