2

PDF を返す単純な Spring MVC コントローラー メソッドがあります。

@RequestMapping(value="/attachment/portfolios/{investorNum}/reports/{reportId}/periods/{reportingPeriod}")
    public ResponseEntity<byte[]>  getReportForDownload(@PathVariable String reportId, @PathVariable long investorNum, @PathVariable long reportingPeriod) throws IOException{
        InputStream in = servletContext.getResourceAsStream("/sample.pdf");
        final HttpHeaders headers = new HttpHeaders();
        //headers.setContentType(MediaType.valueOf("application/pdf"));
        headers.add("Content-Type", "application/pdf");
        headers.add("Content-disposition", "attachment; filename=abcd.pdf");
        return new ResponseEntity<byte[]>(IOUtils.toByteArray(in), headers, HttpStatus.CREATED);
    }

そして春のbytearrayメッセージコンバーター:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
       <property name="messageConverters">
         <util:list>
                <bean id="byteArrayMessageConverter" class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
         </util:list>
         </property>
    </bean>

ダウンロード用のjQueryモーダルボックス:

"Download" : function() {
 location.href = "./attachment/portfolios/2201/reports/DELINQSUM/periods/1137";
}

ダウンロード ボタンは、FF、Chrome では問題なく機能しますが、IE では機能しません。IE 言う

Internet Explorer は localhost から 1137 をダウンロードできません。

Internet Explorer はこのインターネット サイトを開くことができませんでした。要求されたサイトは利用できないか、見つかりません。後でもう一度やり直してください。

http://support.microsoft.com/kb/316431および2のようにヘッダーをたどりましたが、何も起こらず、IE は引き続き問題を報告します。

また、以下の変更を加えてモーダル内に埋め込まれた表示用に PDF をストリーミングしており、正常に動作します。

headers.add("Content-disposition", "inline; filename=abcd.pdf");

これをTomcatで実行しています。

どんな助けでも大歓迎です。

4

1 に答える 1

1

私は同じ問題を抱えていました。私はApache FOPでPDFを生成し、あなたが持っているのと同じヘッダーを使用して、Springの方法で応答に書き込んでいますResponseEntity. コンストラクターHttpStatus.OKの代わりに選択することで問題を解決しHttpStatus.CREATEDました。ResponseEntity

明らかに、IE8 は 201 (CREATED) を応答コードとして認識しません。

于 2014-03-02T17:09:58.860 に答える