Apache Camel下载附件,附件主体位于响应中,fileName位于Content-Disposition标头中

gkl3eglg  于 2023-03-08  发布在  Apache
关注(0)|答案(1)|浏览(120)

我正在尝试使用rest camel-cxfrs下载二进制文件。我正在从http调用获取附件响应。获取响应后,我正在尝试在exchange响应正文中设置相同的响应,并将fileName和内容类型设置为响应标头。
对于二进制文件,我可以将内容部署头和内容类型设置为八位字节流,但不能设置响应中的正文。因此,当下载文件时,它会说文件可能已损坏。
对于txt文件,我可以设置标题以及正文,但不能为二进制文件。

@javax.ws.rs.Path("/getworkorderattachment/{workLogID}"). 
@javax.ws.rs.GET(). 
@javax.ws.rs.Produces({"application/json"}). 
Object getWorkOrderWorkLogIDAttachment();

得到Http的响应后

.marshal().mimeMultipart()

然后在处理器中

Response.ResponseBuilder jaxrsResponseBuilder = Response.ok("")
.header("Content-Disposition", contentDisposition)
.type(MediaType.APPLICATION_OCTET_STREAM);                
   
 Response response = jaxrsResponseBuilder.build();
                    exchange.getIn().setBody(response);
zphenhs4

zphenhs41#

这是一个迟来的回答,但对后代来说:
您没有发布足够的代码来确保这一点,但是我看到您直接使用

jaxrsResponseBuilder.build();
                    exchange.getIn().setBody(response);

如果你正在传输一个二进制文件并且在任何点它被转换成一个字符串,它将被破坏.这二进制文件数据必须是要么保持在一个流中要么存储在一个byte[].
当它转换为字符串时,字节会被转换为String的char[]中的字符,但不能再转换回原来的字节。

相关问题