Отправить видео как ответ пользователю - PullRequest
0 голосов
/ 23 мая 2018

У меня есть служба, которая выполняет следующие действия:

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-адрес, создаю объект URL, а затем пишу URL для StreamingOutputIOUTILS

Это хорошо работает для коротких видео, но когда видео слишком длинное, пользователь ждет ответа около 5 минут.

Можно ли как-нибудь переписать мою логику?

1 Ответ

0 голосов
/ 23 мая 2018

Наконец, я нашел решение, которое я заменяю

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

На

return output -> {
                IOUtils.copy(url.openConnection().getInputStream(),output);
                output.flush();
                output.close();
            };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...