2016-05-20 11 views
0

私は、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を返します。エラーが発生した場合、デフォルトの値になるように属性を生成しません。

+0

以下の回答を回答として追加してください。 – Ash

答えて

0

ANSWER:ちょうど正しいPDFを返す前に

request.setAttribute(HandlerMapping.PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE, Sets.newHashSet(MediaType.valueOf("application/pdf"))); 

: 最後に、私は次のように、手動で生産可能属性を置きます。エラーが発生した場合、デフォルトの値になるように属性を生成しません。

関連する問題