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/pdf」ではなく「application/text-plain:formatted」です。(さまざまなソースからの)いくつかの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)、後: ""