У меня есть служба, которая выполняет следующие действия:
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 для StreamingOutput
IOUTILS
Это хорошо работает для коротких видео, но когда видео слишком длинное, пользователь ждет ответа около 5 минут.
Можно ли как-нибудь переписать мою логику?