-3

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)、後: ""

4

1 に答える 1

3

.svgファイルでも同じ問題がありました。

プロファイルフォルダ内のMozillaFirefoxmimeTypes.rdfファイルを変更することで解決しまし。(上記のPiotrsリンクへのthx)

同様の問題を抱えている他の人々のために。これは、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

これにより、firefoxmimeTypes.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を再起動するだけです。

于 2013-03-08T18:31:56.257 に答える