【问题标题】:Spring MVC 4 File Upload Failing SilentlySpring MVC 4文件上传失败
【发布时间】:2017-02-09 11:59:37
【问题描述】:

我在 Tomcat 8 上使用 Spring MVC(4.1 版),并且正在拼命尝试使文件上传功能正常工作。目前,我有一个这样配置的控制器:

@RequestMapping(value={"/TestCase/Upload"}, method=RequestMethod.POST)
@ResponseBody
public ResponseEntity<String> uploadFile(HttpServletRequest request,
        @RequestParam("file") MultipartFile file) {
     System.out.println("Hit this location.");
     return new ResponseEntity("Success");
}

我的 web.xml 具有适当的服务器配置:

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
    <!-- Configuration for file upload (configuring Multipart file) -->
    <multipart-config>
        <location>/tmp</location>
        <max-file-size>500000</max-file-size>
        <max-request-size>505000</max-request-size>
        <file-size-threshold>10485</file-size-threshold>
    </multipart-config>
</servlet>

最后,我的 Spring xml 配置文件指定了必要的解析器:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="500000" />
    </bean>

Apache commons-fileupload JAR 在类路径中。

我过去曾在非 Tomcat 服务器上成功使用过这种方法,但现在该应用程序无法正常工作 - 但它正在悄悄地失败。响应的状态码为 200,但文件上传控制器方法内部没有执行任何操作。服务器日志中没有抛出异常,我可以让控制器方法打印出任何内容的唯一方法是完全删除“Multipart”参数。起初我以为控制器方法根本没有被命中,但如果我更改 URL 映射,那么调用代码会抛出 404 - 所以它肯定命中了正确的映射/方法 - 只是里面什么都没有方法正在执行(no 抛出异常!)

我做错了什么?

【问题讨论】:

    标签: spring-mvc tomcat file-upload web-applications tomcat8


    【解决方案1】:

    事实证明,Spring MVC 在启动时会从控制台隐藏 noClassDef。问题是类路径中缺少 apache-commons-io.jar。包括那个 JAR 会导致一切正常工作。

    所以将来如果 Spring 悄悄地行为不端 - 检查以确保明确包含所有必要的库,因为它肯定不会告诉你!

    【讨论】:

      猜你喜欢
      • 2016-04-03
      • 2016-09-07
      • 1970-01-01
      • 2016-06-14
      • 2016-08-21
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多