我正在使用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>
with:
<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),之后:“”
答案 0 :(得分:3)
.svg文件存在同样的问题。
通过修改 mimeTypes.rdf中的Mozilla Firefox profile folder 文件来解决此问题。 (以上是Piotrs Link)
对于有类似问题的其他人。这是由于PHP脚本中错误设置的Content-Type造成的。当第一次测试脚本(它通过php间接传递svg文件)时,我在header()中设置了另一个Content-Type集。
header("Content-Type: image/svg+xml"); //should have been
header("Content-Type: application/vnd.android.package-archive"); //was actually set
这现在推翻了firefox mimeTypes.rdf文件中的内容类型设置:
<RDF:Description RDF:about="urn:mimetype:application/vnd.android.package-archive"
NC:value="application/vnd.android.package-archive"
NC:editable="true"
NC:fileExtensions="svg"
NC:description="Scalable Vector Graphics">
<NC:handlerProp RDF:resource="urn:mimetype:handler:application/vnd.android.package-archive"/>
</RDF:Description>
可能是因为FF认为它看到了一个“新”文件/文件类型 - 并将其添加到其配置中。
要解决此问题,您只需删除mimeTypes.rdf中错误的XML部分,然后重新启动FF。