Java 将视频作为响应发送给用户

Java 将视频作为响应发送给用户,java,jax-rs,Java,Jax Rs,我有一个服务,可以做以下事情: 1从用户http Get获取参数 2将视频文件作为响应返回给用户 3我的代码是: @GET @Path("/test") public Response test(@QueryParam("url") final String videoUrl) { final CrawlerResult result = this.crawlerService.crawl(videoUrl); if (result.isSucce

我有一个服务,可以做以下事情:

1从用户http Get获取参数

2将视频文件作为响应返回给用户

3我的代码是:

@GET
    @Path("/test")
    public Response test(@QueryParam("url") final String videoUrl) {
        final CrawlerResult result = this.crawlerService.crawl(videoUrl);
        if (result.isSuccess()) {
            final StreamingOutput fileStream = this.crawlerService.videoAsStream(result.getResult());
            return Response.ok(fileStream, MediaType.APPLICATION_OCTET_STREAM)
                           .header("content-disposition", "attachment; filename = movie.mp4")
                           .build();
        } else {
            return Response.status(Response.Status.NOT_ACCEPTABLE)
                    .entity(result)
                    .build();
        }
    }
和爬虫服务:

正如您所见,我获取一个url,生成url对象,然后使用IOUTILS将url写入StreamingOutput

这对于短视频来说很好,但当视频太长时,用户会等待5分钟左右的响应


有没有可能重写我的逻辑?

最后,我找到了一个解决方案 我代替

output.write(IOUtils.toByteArray(url));
                output.flush();


你已经在流媒体了,所以应该没问题。您在这里做什么最终CrawlerResult=this.crawlerService.crawldvideourl;?我证实了你所说的url@SMA这行代码output.writeIOUtils.toByteArrayurl的问题;它对长电影执行的时间太长,这就是您将字节流式传输回客户端的原因?这也将取决于客户以多快的速度接受流式服务data@SMA返回Response.okfileStream,MediaType.APPLICATION\u OCTET\u STREAM
output.write(IOUtils.toByteArray(url));
                output.flush();
return output -> {
                IOUtils.copy(url.openConnection().getInputStream(),output);
                output.flush();
                output.close();
            };