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で実行しています。
どんな助けでも大歓迎です。