Spring文件上传 - 获取预期的MultipartHttpServletRequest:是否配置了MultipartResolver?错误

11 浏览
0 Comments

Spring文件上传 - 获取预期的MultipartHttpServletRequest:是否配置了MultipartResolver?错误

我正在尝试在我的Angular web应用程序中使用angular-file-upload来实现多文件上传功能。目前,前端功能可以正常工作,但每次上传尝试都会抛出一个java.lang.IllegalStateException,java.io.IOException]: java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?异常。\n上传控制器定义为\n

@Controller
@PropertySource("classpath:application.properties")
public class FileUploadController {
    @Resource
    private Environment env;
    @RequestMapping(value = "/fileupload", method = RequestMethod.POST)
    @ResponseBody
    public List fileUpload(@RequestParam("file") MultipartFile[] uploadFiles) throws IllegalStateException, IOException {
        //文件处理逻辑
    }
}

\n在我的AppConfig.java类中,我声明了bean\n

@Bean
public CommonsMultipartResolver commonsMultipartResolver(){
    CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
    commonsMultipartResolver.setDefaultEncoding("utf-8");
    commonsMultipartResolver.setMaxUploadSize(50000000);
    return commonsMultipartResolver;
}

\n并通过以下方式启动web应用程序\n

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
    ctx.register(AppConfig.class);
    servletContext.addListener(new ContextLoaderListener(ctx));
    ctx.setServletContext(servletContext);
    ctx.refresh();
    Dynamic servlet = servletContext.addServlet(SERVLET_NAME, new DispatcherServlet(ctx));
    servlet.addMapping("/");
    servlet.setLoadOnStartup(1);
    //servlet.setMultipartConfig(ctx.getBean(MultipartConfigElement.class));
}

\n我不认为这是由于我的Angular视图中缺少

元素,因为我可以看到Content-Typemultipart/form-data,而且请求有效载荷已正确设置。\n

Remote Address:192.168.33.10:80
Request URL:http://dev.jason.com/rest/fileupload
Request Method:POST
Status Code:500 Internal Server Error
Request Headers
  Accept:*/*
  Accept-Encoding:gzip,deflate
  Accept-Language:en-US,en;q=0.8
  Cache-Control:no-cache
  Connection:keep-alive
  Content-Length:415235
  Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryBHlsldPQysTVpvwZ
  Host:dev.jason.com
  Origin:http://dev.jason.com
  Pragma:no-cache
  Referer:http://dev.jason.com/
  User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36
Request Payload
   ------WebKitFormBoundaryBHlsldPQysTVpvwZ
   Content-Disposition: form-data; name="file"; filename="IMG_5072.jpg"
   Content-Type: image/jpeg
   ------WebKitFormBoundaryBHlsldPQysTVpvwZ--

\n请注意,在AppConfig.java中包含以下内容时,仍然会出现此问题,并且在我的servlet初始化类中取消注释以下命令servlet.setMultipartConfig(ctx.getBean(MultipartConfigElement.class));。\n非常感谢任何帮助!

0
0 Comments

在Spring文件上传过程中,可能会遇到"Expected MultipartHttpServletRequest: is a MultipartResolver configured?"的错误。这篇文章将介绍出现这个问题的原因以及解决方法。

在解决这个问题之前,我们需要在webmvc-context.xml文件中添加以下代码:

<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver"/>

这段代码将配置一个MultipartResolver实例,用于处理文件上传请求。如果没有配置MultipartResolver,Spring无法正确解析文件上传请求,从而导致"Expected MultipartHttpServletRequest: is a MultipartResolver configured?"错误的出现。

通过添加以上代码,我们为Spring配置了一个CommonsMultipartResolver实例。CommonsMultipartResolver是Spring提供的一个常用的MultipartResolver实现,它使用Apache Commons FileUpload库来处理文件上传请求。

配置完MultipartResolver后,Spring将能够正确解析文件上传请求,并将其转换为MultipartHttpServletRequest对象。这样,我们就能够在Controller中使用MultipartHttpServletRequest对象来获取上传的文件。

总结起来,解决"Expected MultipartHttpServletRequest: is a MultipartResolver configured?"错误的方法是在webmvc-context.xml中添加上述代码配置MultipartResolver实例。这样,Spring就能够正确解析文件上传请求,避免出现错误。

0
0 Comments

Spring文件上传 - 出现"Expected MultipartHttpServletRequest: is a MultipartResolver configured?"错误的原因及解决方法

在进行Spring文件上传时,有时会遇到"Expected MultipartHttpServletRequest: is a MultipartResolver configured?"错误。该错误的原因是没有配置MultipartResolver解析器。

解决该问题的方法是在servler-context.xml中添加以下代码:


    

这样就可以解决该错误,无需进行其他操作。这是最简单的解决方法。谢谢。

0
0 Comments

问题原因:Spring的MVC堆栈要求MultipartResolver bean的名称必须为"multipartResolver",而不是其他任何名称。

解决方法:将方法名改为multipartResolver()或者(name = "multipartResolver")的形式。

0