Я должен выполнить запрос к своему бэкэнду от клиента, чтобы загрузить предварительный просмотр видео, и они находятся на сервере s3.Запрос получить видео с s3 и отправить обратно клиенту.Для большого видео файла это заняло много времени.Поэтому мне нужно выполнить запрос диапазона.Запрос с одним диапазоном работает хорошо и отправляет мне точные байты данных.Но когда я добавляю запрос с несколькими диапазонами, он не отправляет эти фрагментированные данные.Есть ли процесс для этого?
Запрос с одним диапазоном работает хорошо и отправляет мне точные байты данных.Но когда я добавляю запрос с несколькими диапазонами, он не отправляет эти фрагментированные данные.Есть ли процесс для этого?
Примечание: S3 не поддерживает запрос нескольких диапазонов.Поэтому я отправляю запрос на s3 только с одним диапазоном, получаю этот поток байтов и отправляю его клиенту.Но это только отправка первого байтового диапазона.
public multiPartRangeRequest() {
val boundaryString = MimeTypeUtils.generateMultipartBoundaryString();
response.setContentType("multipart/byteranges; boundary=" + boundaryString);
val out = response.getOutputStream();
for (val range : ranges) {
val length = objectMeta.getContentLength();
val start = range.getRangeStart(length);
val end = range.getRangeEnd(length);
val rangeLength = end - start + 1;
val inputStreamFromS3 = s3Manager.getObject(fileId, fileType, length, range)
.getObjectContent();
out.println();
out.println("--" + boundaryString);
response.setHeader(CONTENT_LENGTH, String.valueOf(rangeLength));
response.setHeader(CONTENT_RANGE, "bytes " + start + "-" + end + "/" + length);
IOUtils.copy(inputStreamFromS3, response.getOutputStream());
out.println(CONTENT_RANGE + ": bytes " + start + "-" + end + "/" + length);
out.println(CONTENT_LENGTH + ": " + rangeLength);
}
}