【问题标题】:pdf file couldn't save using ajaxpdf文件无法使用ajax保存
【发布时间】:2019-12-03 11:14:31
【问题描述】:

我有这样的休息端点:

@PostMapping(value = "/pdf")
public ResponseEntity<byte[]> downloadPdf(@RequestBody ReportData reportData) {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_PDF);
    headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
    headers.setContentDispositionFormData(reportData.getFileName(), reportData.getFileName() + ".pdf");

    try {
        byte[] generatedPdf = downloadService.getPdf(reportData.getUrl(), reportData.getParams(), reportData.getReportName());
        return new ResponseEntity<>(generatedPdf, headers, HttpStatus.OK);
    } catch (IOException e) {
        logger.error("Error downloading report.", e);
        return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

我用这样的 ajax 来调用它;

$.ajax({
            type: 'POST',
            contentType: 'application/json',
            responseType: 'arraybuffer',
            url: 'api/download/pdf',
            data: JSON.stringify(constructPostData()),
            success: function (result) {
                var blob = new Blob([result], {type: "application/pdf"});
                var link = document.createElement('a');
                link.href = window.URL.createObjectURL(blob);
                link.download = reportName;
                link.click();
            },
            error: function (xhr, status) {
                console.log(status);
            }
        });

但这只会给我一个空的pdf。
如果我用 rest 客户端点击它并从那里下载 pdf,我可以看到正确的 pdf。

【问题讨论】:

    标签: ajax spring pdf download http-post


    【解决方案1】:

    我已经改变了像下面这样的 ajax 请求及其工作

    $.ajax({
            method: 'POST',
            contentType: 'application/json',
            xhrFields: {
                            responseType: 'blob'
                        },
            url: 'api/download/pdf',
            data: JSON.stringify(constructPostData()),
            success: function (result) {
                var link = document.createElement('a');
                link.href = window.URL.createObjectURL(result);
                link.download = reportName;
                link.click();
            },
            error: function (xhr, status) {
                console.log(status);
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多