Spring MVC 4 文件上传无提示失败
Spring MVC 4 File Upload Failing Silently
我在 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 - 所以它肯定会命中正确的 mapping/method - 它是只是方法内部没有任何内容正在执行(抛出 没有 异常!)
我做错了什么?
原来 Spring MVC 会在启动时从控制台隐藏 noClassDef。问题是类路径中缺少 apache-commons-io.jar。包括那个 JAR 导致一切正常工作。
所以将来如果 Spring 行为不端 - 检查以确保明确包含所有必要的库,因为它肯定不会告诉你!
我在 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 - 所以它肯定会命中正确的 mapping/method - 它是只是方法内部没有任何内容正在执行(抛出 没有 异常!)
我做错了什么?
原来 Spring MVC 会在启动时从控制台隐藏 noClassDef。问题是类路径中缺少 apache-commons-io.jar。包括那个 JAR 导致一切正常工作。
所以将来如果 Spring 行为不端 - 检查以确保明确包含所有必要的库,因为它肯定不会告诉你!