java - 使用 JAX-RS 通过 HTTP PUT 流式传输字节

标签 java http webserver streaming jax-rs

我有一个工作流程,涉及从我的 Java 客户端到我的 Web 服务器执行 HTTP POST。帖子的正文有一个规范对象。然后我将它从我的网络服务器传递给 Apache ZooKeeper(它在服务器上以自己的进程运行)运行一个大的毛茸茸的计算。我正在努力弄清楚如何以流方式将字节发送回我的网络服务器。我需要它流回,因为我的 Java 客户端在我的网络服务器上有一个 HTTP GET 请求正在等待流回字节。我等不及整个计算完成,我希望尽快将字节发送回客户端。

大多数从客户端和网络服务器端执行 HTTP PUT 的 JAX-RS 在线示例都没有流代码示例。我会发布我目前所拥有的,但它不起作用。

这是我的 ZooKeeper Java 代码,它调用 JAX-RS 客户端 PUT。我真的不确定该怎么做,我从未尝试过使用 JAX-RS 流式传输数据。

final Client client = ClientBuilder.newClient();
final WebTarget createImageTarget = client.target("groups/{imageGroupUuid:" + Regex.UUID + "}");
StreamingOutput imageResponse = createImageTarget.request(MediaType.APPLICATION_OCTET_STREAM).put(Entity.entity(createRandomImageDataBytes(imageConfigurationObject), MediaType.APPLICATION_OCTET_STREAM), StreamingOutput.class);

这是我处理 HTTP PUT 的网络服务器代码。它只是一个 stub ,因为我对我的客户端 HTTP PUT 没有信心。

@PUT
@PATH("groups/{uuid:" + Regex.UUID + "}")
@Consumes(MediaType.APPLICATION_OCTET_STREAM)
public void updateData(StreamingOutput streamingOutput)
{

}

最佳答案

尝试这样的事情:

@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/{arg}")
public Response get(@PathParam("arg") {

    //get your data based on "arg"

    StreamingOutput stream = new StreamingOutput() {
        @Override
        public void write(OutputStream os) throws IOException, WebApplicationException {
            Writer writer = new BufferedWriter(new OutputStreamWriter(os));

            for (org.neo4j.graphdb.Path path : paths) {
                writer.write(path.toString() + "\n");
            }
            writer.flush();
        }
    };

    return Response.ok(stream).build();
}

@PUT
@Consumes("application/octet-stream")
public Response putFile(@Context HttpServletRequest request,
                     @PathParam("fileId") long fileId,
                     InputStream fileInputStream) throws Throwable {
    // Do something with the fileInputStream
    // etc
}

关于java - 使用 JAX-RS 通过 HTTP PUT 流式传输字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25922920/

相关文章:

java - Matlab 函数 'quad' 在 Java 和 C++ 中可用吗?

java - 重新加载 jsf 表单错误上的某个 jQuery 代码

java - Mockito 没有返回我需要的东西

java - 如何测试 ConcurrentHashMap 是否真正线程安全?

java - 发布数据时无法得到回复?

jakarta-ee - Tomcat部署

unit-testing - 如何使用Ginkgo对HTTP请求进行单元测试?

java - 如何读取HTTP POST请求参数

nginx - 在子域上使用具有不同根文件夹的多个位置配置 nginx

ubuntu - 我如何公开我的 IP,外部可以访问我的本地主机