在Ajax-Call之后从Java下载ZIP

时间:2015-02-18 13:29:10

标签: java javascript ajax

我遇到了问题,我在JAVA中创建了一个包含PDF文件的ZIP文件

@Override
@ResponseBody
@RequestMapping(value = "pdfDownload", method = RequestMethod.POST, produces = "application/zip")
public byte[] generatePDFs(
        @RequestParam(value = "date", required = true) String date,
        Principal principal,
        HttpServletResponse response) {

    String filename;
    PrintRequest pr = new PrintRequest ();
    List<String> pis = new ArrayList<> ();
    pis.add ("3453453535");
    pr.setDate ("032015");
    pr.setPids (pis);

    filename = pr.getDate () + ".zip";
    response.setContentType ("application/zip");
    response.setHeader("Content-Disposition", "attachment; filename="+ filename);

    return createZip (pr, principal);
}

创建ZIP文件工作正常,但如果我用jQuery AJAX POST调用它,我会返回比特流,但无法下载文件。

顺便说一下。该文件是动态创建的,不会在服务器上。

希望有人可以帮助我。

祝你好运!

1 个答案:

答案 0 :(得分:2)

如果在ajax调用中对此方法发出请求,则生成的字节流将位于javascript中的结果对象中。这根本没用。

你根本不应该在ajax调用中这样做。生成指向请求网址的普通html链接,或者在javascript中构建网址并将其放入window.location

如果您需要发送POST,请创建一个html表单并发布。您可以使用javascript填充数据,然后调用submit()。点击此处了解更多详情:JavaScript post request like a form submit