我正在使用 Spring 3.2.0.M2,并且正在尝试上传 pdf 文件。
JSP 文件:
<form method="POST" action="upload" enctype="multipart/form-data>
<input type="file" name="file" />
</form>
控制器 :
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String handleUpload(@RequestParam MultipartFile file) {
System.out.println(file.getContentType());
//prints "application/text-plain:formatted"
}
我正在使用标准多部分解析器:
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<multipart-config />
</servlet>
和 :
<bean id="multipartResolver"
class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
</bean>
我也尝试过使用 Apache 的 CommonsMultipartResolver,但问题是一样的。
我得到的是“application/text-plain:formatted”而不是“application/pdf”。我测试了几个 pdf 文件(来自不同的来源)。当我尝试上传另一种文件类型(例如 Word 文档)时,它按预期工作(对于 Word 文档,我得到“application/msword”)。
我打算将内容类型(和文件名)存储到数据库中,以便以后检索和下载文件。像这样调用 setContentType 时,内容类型不正确会导致异常:
public void downloadResource(@RequestParam("resId") Long resourceId, HttpServletResponse response) {
// get resource with its id.
response.setContentType(resource.getContentType());
//throws org.apache.tomcat.util.http.parser.TokenMgrError
}
异常消息是:
第 1 行第 23 列的词法错误。遇到:“:”(58),在:“”之后