【发布时间】:2016-07-18 13:49:59
【问题描述】:
我编写了一个 Spring 控制器,它接受 json 请求并响应 pdf 文件。
public ResponseEntity<byte[]> generateResp(...)
byte[] gMapRep = Files.readAllBytes(file.toPath());
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.parseMediaType("application/pdf"));
httpHeaders.setContentDispositionFormData("content-disposition", "filename=report.pdf");
httpHeaders.setCacheControl("must-relative, post-check=0, pre-check=0");
return ResponseEntity
.ok()
.headers(httpHeaders)
.body(gMapRep);
它在 Postman 上运行良好。 POST 方法是必需的,因为我需要发送一些参数。但是如何从响应中获取/下载 CycleJS 中的 pdf 文件。我在前端尝试过:
const buttonRequest$ = actions.buttonClick$
.withLatestFrom(sources.arcgisDriver.onMapLoaded,
(ev, _)=> {
return {
url: myURL,
method: 'POST',
type: 'application/json',
send: data
}
});
sources.HTTP
.filter(response => {
return !response.error && response.request.url.includes(myURL)
})
.subscribe(resp => window.open("data:application/pdf;base64, " + resp.text, '', 'height=650,width=840'));
【问题讨论】:
-
我已尝试使用 window.open() 获取响应并订阅响应,但它不起作用。我也试过 add data:application/pdf, + response.text ,它会打开 pdf 文件,但这里解析 pdf 文件有一些问题。
-
你能发布你的前端代码吗?仅从该描述很难说出了什么问题
-
cycle/http 基于 XHR (Ajax) 的 SuperAgent。有必要使用 XHR 吗?或者您可以简单地使用 HTTP POST 序列化 JSON 数据吗?
-
不,我认为在这种情况下没有必要。 HTTP POST 我只需要发送对构建 pdf 很重要的数据。
标签: javascript rxjs cyclejs