发送视频作为对用户的响应

时间:2018-05-23 11:30:36

标签: 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.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();
        }
    }

CrawlerService

@Override
    public StreamingOutput videoAsStream(final String videoUrl) {
        try {
            final URL url = new URL(videoUrl);
            return output -> {
                output.write(IOUtils.toByteArray(url));
                output.flush();
            };
        } catch (final MalformedURLException e) {
            log.error("Url exception for url {}",videoUrl);
            throw new UncheckedIOException(e);
        }
    }

如您所见,我会抓取一个网址,制作URL个对象,然后使用StreamingOutput

将网址写入IOUTILS

这适用于短视频,但是当视频太长时,用户会等待约5分钟的响应。

有没有可能的方法来重写我的逻辑?

1 个答案:

答案 0 :(得分:1)

最后,我找到了解决方案 我替换

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

return output -> {
                IOUtils.copy(url.openConnection().getInputStream(),output);
                output.flush();
                output.close();
            };