2012-11-07 34 views
-5

我使用的是Spring 3.2.0.M2,我试图上传PDF文件。使用Firefox的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" 
} 

我使用的是标准multipart解析器:

<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 
} 

异常消息为:“::”(58

位于第1行,遇到柱23.词汇错误)之后:“”

+2

相关:[多部分/表单数据请求的文件部分的内容类型由客户端设置错误](http://stackoverflow.com/q/11009706/95735) –

+0

亲爱的同事@Tunaki,请与我联系在我的公司地址;) –

回答

3

对.svg文件有同样的问题。

通过修改的Mozilla Firefox浏览器mimeTypes.rdf文件中profile folder解决它。 (thx Piotrs链接上面)

对于其他人有类似的问题。这是由于我的PHP脚本中错误地设置了Content-Type。当首次测试脚本时(它通过php间接传递了一个svg文件),我在头文件()中设置了另一个Content-Type集合。

header("Content-Type: image/svg+xml"); //should have been 
header("Content-Type: application/vnd.android.package-archive"); //was actually set 

现在,这推翻了在火狐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。

相关问题