2017-10-11 46 views
1

我从Swagger自动生成JAX-RS接口。 我使用Jersey 2.25.1。JAX-RS/Jersey 2文件下载 - 是否有服务器和生成客户端代理的公共API

对于大多数使用情况,所有工作都很好。我们有相同的服务器和客户端部件的接口。 客户端从与org.glassfish.jersey.client.proxy.WebResourceFactory的接口生成。

现在我需要通过流式传输来实现文件下载(文件会很大,通常在千兆字节范围内,因此需要流式传输)。

我可以使用下面的签名服务器:

@GET 
@Path("/DownloadFile") 
@Produces({"application/octet-stream"}) 
StreamingOutput downloadFileUniqueId(); 

StreamingOutput不能很显然,在客户端使用。

JAX-RS/Jersey中是否有任何功能在服务器和客户端之间具有通用接口?

我见过的上传,这是可能的使用FormDataMultiPart,我想下载一个类似的解决方案......

+0

在客户端代码中,您必须读取响应实体作为输入流 - InputStream responseStream = response.readEntity(InputStream.class);然后读取此流以获取实际的文件内容。 –

+0

尝试使用Response返回类型,然后在客户端代码中,可以调用'response.get(InputStream.class)'' – vikarjramun

回答

0

好吧,发现使用javax.ws.rs.core.Response对象作为返回类型的有效的解决方案:

Server代码:

public Response downloadFile(String uniqueId){ 
    InputStream inputStream = filePersistenceService.read(uniqueId); 
    Response.ok(outputStream -> IOUtils.copy(inputStream, outputStream)).build() 

}

客户端代码:

Response response = client.downloadFile(uniqueId); 
InputStream resultInputStream = response.readEntity(InputStream.class); 

这适用于由org.glassfish.jersey.client.proxy.WebResourceFactory生成的客户端。

相关问题