1. ホーム
  2. javascript

[解決済み] Ajaxを使用してPDFファイルをダウンロードし、開く

2022-10-21 21:43:33

質問

PDFを生成するアクションクラスがあります。その contentType は適切に設定されています。

public class MyAction extends ActionSupport 
{
   public String execute() {
    ...
    ...
    File report = signedPdfExporter.generateReport(xyzData, props);

    inputStream = new FileInputStream(report);
    contentDisposition = "attachment=\"" + report.getName() + "\"";
    contentType = "application/pdf";
    return SUCCESS;
   }
}

私はこれを action をAjaxで呼び出しています。私は、このストリームをブラウザに配信する方法を知りません。私はいくつかのことを試してみましたが、何もうまくいきませんでした。

$.ajax({
    type: "POST",
    url: url,
    data: wireIdList,
    cache: false,
    success: function(response)
    {
        alert('got response');
        window.open(response);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) 
    {
        alert('Error occurred while opening fax template' 
              + getAjaxErrorString(textStatus, errorThrown));
    }
});

上記ではエラーが発生します。

あなたのブラウザは、このサーバーが理解できないリクエストを送信しました。

どのように解決するのですか?

必ずしもAjaxが必要なわけではありません。単に <a> のリンクだけで十分です。 content-dispositionattachment をサーバーサイドのコードに追加します。この方法では、もしそれがあなたの主な関心事であるなら、親ページは開いたままになります(そうでなければ、なぜ不必要にこのためにAjaxを選んだのでしょうか?) それに、これをうまく非同期で処理する方法はありません。PDFは文字データではありません。バイナリデータです。以下のようなことはできません。 $(element).load() . というようなことはできません。 全く新しい リクエストを使いたい。そのために <a href="pdfservlet/filename.pdf">pdf</a> が完全に適しています。

サーバーサイドのコードについてもっと支援するために、使用されている言語についてもっと説明し、コードの試行の抜粋を投稿する必要があるでしょう。