私は、PDFファイルを生成してダウンロードする2つのサービスを提供しています。最初に、セッション内のデータを保存し、一意のIDを生成してそれを返すPOST(データを隠すため)があります。 2番目のサービスは、セッションからIDを削除し、PDFを生成してストリームとして返すGET(paramはPOSTの一意のIDです)です。 )Spring MVCクロム発行のPDFをダウンロード
@RequestMapping(value = "/get", method = RequestMethod.GET)
@ResponseBody
public HttpEntity<byte[]> getData(
@ApiParam(name="hash", value="hash", required=true)
@RequestParam(value="hash", required = true) String hash,
@Context HttpServletResponse response) throws IOException {
Map reportData = reportsContext.getReportData(hash);
/*generate PDF here*/
return new HttpEntity<>(report.getContent(), getHeaders(report));
}
とgetHeaders(ある:それは次のようになります
private HttpHeaders getHeaders(ReportData report) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.valueOf("application/pdf"));
headers.add("Content-Disposition", "attachment; filename=".concat(report.getTitle()).concat(".pdf"));
return headers;
}
それは一般的にすべてのブラウザやシステムが、AndroidのChromeで正常に動作します。まず、Android上のChromeが2つのGET(ブラウザから1つ、ダウンロードマネージャから2つ目)を送信したことがわかりました。ハッシュが削除されたため、2番目のGET例外が例外となりました。次のステップでは、生成されたストリームをセッション(>。<)に保存し、それを2番目のGETに戻しました - 返されたストリームが同じであっても(getData()から戻ったとき)、2番目のレスポンスは不正です。私はこれが何らかの春の問題だと思います。何とかフォーマットを変更します。
応答のイニシャルがあります。 最初のGET:
HTTP/1.1 200 OK X-Poweredのバイ:Expressサーバ:Apacheの-コヨーテ/ 1.1 コンテンツ-処分:添付ファイルは、 ファイル名= operation_20052016.pdfコンテンツタイプ: アプリケーション/ PDFコンテンツの長さ:28626日付:金、2016年5月20日7時51分08秒 GMT接続:近い
%のPDF-1.4%âăĎÓ
二GET:
HTTP/1.1 200 OK X-Poweredのバイ:Expressサーバ:Apacheの-コヨーテ/ 1.1 コンテンツ-処分:添付ファイル; ファイル名= operation_20052016.pdfコンテンツタイプ: アプリケーション/ PDF転送エンコード:日付をチャンク:金、2016年5月20日午前7時51分13秒GMT 接続:
2000近い「JVBERi0xLjQKJeLj
- 直前
request.setAttribute(HandlerMapping.PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE, Sets.newHashSet(MediaType.valueOf("application/pdf")));
:----------- ANSWER ------------
最後に、私は次のように、手動で生産可能属性を置きます正しいPDFを返します。エラーが発生した場合、デフォルトの値になるように属性を生成しません。
以下の回答を回答として追加してください。 – Ash