Angular2 download PDF from REST API



我有一个必须返回PDF的REST API。我已经将PDF转换为字节数组,并将其与我的REST端点一起返回。

有效负载如下所示:

{"_body":"%PDF-1.4n%����n1 0 objn<<n/Type /Catalogn/Version /1.4n/Pages 2 0 Rn>>nendobjn2 0 objn<<n/Type /Pagesn/Kids [3 0 R]n/Count 1n>>nendobjn3 0 objn<<n/Type /Pagen/MediaBox [0.0 0.0 612.0 792.0]n/Parent 2 0 Rn/Contents 4 0 Rn/Resources 5 0 Rn>>nendobjn4 0 objn<<n/Filter /FlateDecoden/Length 51n>>nstreamrnx�sn��w3T04RbI�245P0u0007�u0014.r�Ԝ�|�u0000u00177��nM��,.�u0010.u0000�u001fn�rnendstreamnendobjn5 0 objn<<n/Font 6 0 Rn>>nendobjn6 0 objn<<n/F1 7 0 Rn>>nendobjn7 0 objn<<n/Type /Fontn/Subtype /Type1n/BaseFont /Courier-Boldn/Encoding /WinAnsiEncodingn>>nendobjnxrefn0 8n0000000000 65535 frn0000000015 00000 nrn0000000078 00000 nrn0000000135 00000 nrn0000000247 00000 nrn0000000371 00000 nrn0000000404 00000 nrn0000000435 00000 nrntrailern<<n/Root 1 0 Rn/ID [<A0C5C7406F668B945EA55D6F36833E8A> <A0C5C7406F668B945EA55D6F36833E8A>]n/Size 8n>>nstartxrefn535n%%EOFn","status":200,"ok":true,"statusText":"OK","headers":{"Content-Type":["application/json;charset=UTF-8"]},"type":2,"url":"http://localhost:8090/api/forms/1/submissions/1/pdf"}

我已经在我的 Angular2 应用程序中导入了 FileSaver,但我找不到让它工作的方法。我需要在收到PDF时在客户端显示为下载的文件。我该怎么做?我是否应该更改 REST 端点返回数据的方式?

您需要将数据流式传输回客户端,以便能够下载,而不是作为字节数组发送。由于 Spring 是基于 servlet 的,你可以这样做

.
.
.
protected void doGet(HttpServletRequest req, HttpServletResponse res) {
    Path downloadFile = Paths.get("path/to/your/file");
    res.setContentType("application/octet-stream");
    res.setHeader("Content-Disposition", "attachment;filename="+ downloadFile.getFileName().toString());
    OutputStream os = res.getOutputStream();
    InputStream is = Files.newInputStream(downloadFile);
    byte[] buffer = new byte[1024];
    int read = -1;
    while (((read = is.read(buffer)) != -1) {
        os.write(buffer);
    }
    is.close();
    os.close();
}

您可能希望进行错误处理,我省略只是为了简洁起见

最新更新