【问题标题】:can't get file from multipartHttpServletRequest.getFile("files") but get A Part from request.getPart("files")无法从 multipartHttpServletRequest.getFile("files") 获取文件,但从 request.getPart("files") 获取 A Part
【发布时间】:2016-12-19 01:21:31
【问题描述】:

这是我的全部功能

@RequestMapping(value = "/file",headers = "content-type=multipart/*", method = RequestMethod.POST)
@ResponseBody
public String fileUpload(HttpServletRequest request,Model model) throws IOException {
    MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
    MultipartFile files = multipartHttpServletRequest.getFile("files");
    if(files!=null) {
        //do somethings
        log.info(files);
        return "true";
    }else {
        Part file = request.getPart("files");
        log.info(file.getSize());
        return "false";
    }
}

并且MultipartFile files 为空,但Part file 是我预期的结果; 为什么?以及如何直接从multipartHttpServletRequest.getFile("files")获取文件

我的 CommonsMultipartResolver 配置是这样的

@Bean
public CommonsMultipartResolver multipartResolver(){
    CommonsMultipartResolver commonsMultipartResolver=new CommonsMultipartResolver();
    commonsMultipartResolver.setMaxInMemorySize(3000000);
    return  commonsMultipartResolver;
}

【问题讨论】:

  • 你配置CommonsMultipartResolver了吗?
  • 当然,我已经编辑了我的问题
  • 你在哪里把它放在你的配置中?
  • @chaoluo 我把它放在 WebMvcConfigurerAdapter 中,这是由 Configuration 注释的
  • 显示你的客户端 html/ajax

标签: spring-mvc spring-boot spring-security


【解决方案1】:

确保您在 web.xml 中有多部分过滤器。如果您正在使用它,则应该将它放在 之前 Spring Security 过滤器链。

<filter>
  <filter-name>multipartFilter</filter-name>
  <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>multipartFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

将多部分解析器定义为(名称很重要):

@Bean
public MultipartResolver filterMultipartResolver()
{
    return new StandardServletMultipartResolver();
}

由于request.getPart 有效,因此您拥有最新版本的 Servlet API,并且您不需要 Commons FileUpload bean/依赖项,请移除。

【讨论】:

  • 因为它不起作用,所以我有一个问题,当你有另一个带有 CommonsMultipartResolver 的 bean 时,为什么你要返回 StandardServletMultipartResolver()
  • @Kramer StandardServletMultipartResolver 替换 CommonsMultipartResolver。第一个优点是不依赖 Commons FileUpload。
  • 我在stackoverflow.com/questions/53650966/… 上发布了一个问题,正如你提到的那样添加了过滤器我在我的配置文件中创建了 bean,其中我拥有 Rest 服务工作所需的所有 bean...... ..你能指出错误吗,因为我也在 Part 中获取文件,但不是其他方式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
相关资源
最近更新 更多