我正在尝试将我在服务器中生成的PDF文件发送到我的Jersey应用程序中的客户端。这一代很好,我在我的本地机器上创建了文件,没有问题。
当我尝试通过流发送问题时出现问题。当我尝试读取输出的文件时,它完全是空的(有时,它只是被破坏,同样的文件相同的代码,但文件是咕噜声而不是空白)但是,页面的数量是正确的,这是非常奇怪的。然后我尝试使用流来创建一个本地文件,它运行得很好,所以我很确定问题不在于我放在流中的内容,这是我发送给客户端的方法。我也试过不同的,完全正常的,pdf,我也有同样的问题。
一些代码示例
@Path("/produiretest/{id}")
@GET
@Produces("application/pdf")
public Response rapportStreamTest(@PathParam("id") Long id) throws Exception {
final StreamingOutput file = manager.produireRapportStreamingTest(id);
Response.ResponseBuilder response = Response.ok(file);
response.header("Content-Disposition", "attachment; filename=\"" + "previsualisationFicheSignaletique.pdf");
return response.build();
}
StreamingOutput工具(即使我认为这是正确的)
StreamingOutput outStream = new StreamingOutput() {
@Override
public void write(OutputStream outputStream) {
try {
JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);
outputStream.flush();
outputStream.close();
}
catch (Exception ex) {
}
}
};
return outStream;
当我戳服务器时得到的响应示例,显然已经破坏了。
%PDF-1.4 % 5 0 obj <>流 X1 g ^ ? endstream endobj 6 0 obj <>] / Intent / Perceptual / Subtype / Image / Height 600 / Filter / FlateDecode / Type / XObject / Width 600 / SMask 5 0 R / Length 23357 / BitsPerComponent 8>> stream x {pU > pLB¥E @ Bu8 !@% =P H)j NsxAD8“IA $ i r Ŋ0@ ~7@B.{k=kI_“Nݺu͚5K;加权像} AAEׯW¯¯ݺüܹsǎ7oߪUf͚5n뮫w ^ ^ BBB ||ú?__ !___ sGOp8v = DD6 ֯ {cƌyGao>的Unݸ< C p 8T0 S k)“” u ȑ 7 L R ( WIDD (..} {vvvfffZZZӦM= LoB P (ECP @ “” ÇӦM6lXػ PF%蒽醌^ “” Bjƌ Ĵܸ1{
从现在开始不要去哪里,任何指针都会受到赞赏。
答案 0 :(得分:1)
好几下电话后,我设法解决了我的问题,可分为两部分:
1)我们的应用程序结构的工作方式,我们的客户端应用程序不会直接戳到后端应用程序所在的Tomcat服务器。我们有一个Node.js服务器,用作请求的调度程序。显然,Node内部存在一个问题,即尝试使用错误的编码或其他内容来解释流。必须联系管理Node的团队。
2)由于某种原因,Postman Chrome应用程序似乎受到与我们的Node服务器相同的问题的困扰。使用Chrome的DHC插件进行后端测试可以解决我的问题。
所以我犯了一个错误,认为问题是在代码的服务器端,因为Postman和客户端给出了同样的问题,而实际上结果介于两者之间,而Postman似乎也有问题。不太确定,将不得不调查它为什么适用于DHC而不是Postman。