|
|
|
@ -233,8 +233,7 @@ public class ResourceHttpMessageWriter implements HttpMessageWriter<Resource> { |
|
|
|
ranges = request.getHeaders().getRange(); |
|
|
|
ranges = request.getHeaders().getRange(); |
|
|
|
} |
|
|
|
} |
|
|
|
catch (IllegalArgumentException ex) { |
|
|
|
catch (IllegalArgumentException ex) { |
|
|
|
response.setStatusCode(HttpStatus.REQUESTED_RANGE_NOT_SATISFIABLE); |
|
|
|
return handleInvalidRange(response); |
|
|
|
return response.setComplete(); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return Mono.from(inputStream).flatMap(resource -> { |
|
|
|
return Mono.from(inputStream).flatMap(resource -> { |
|
|
|
@ -242,7 +241,13 @@ public class ResourceHttpMessageWriter implements HttpMessageWriter<Resource> { |
|
|
|
return writeResource(resource, elementType, mediaType, response, hints); |
|
|
|
return writeResource(resource, elementType, mediaType, response, hints); |
|
|
|
} |
|
|
|
} |
|
|
|
response.setStatusCode(HttpStatus.PARTIAL_CONTENT); |
|
|
|
response.setStatusCode(HttpStatus.PARTIAL_CONTENT); |
|
|
|
List<ResourceRegion> regions = HttpRange.toResourceRegions(ranges, resource); |
|
|
|
List<ResourceRegion> regions; |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
regions = HttpRange.toResourceRegions(ranges, resource); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch (IllegalArgumentException ex) { |
|
|
|
|
|
|
|
return handleInvalidRange(response); |
|
|
|
|
|
|
|
} |
|
|
|
MediaType resourceMediaType = getResourceMediaType(mediaType, resource, hints); |
|
|
|
MediaType resourceMediaType = getResourceMediaType(mediaType, resource, hints); |
|
|
|
if (regions.size() == 1){ |
|
|
|
if (regions.size() == 1){ |
|
|
|
ResourceRegion region = regions.get(0); |
|
|
|
ResourceRegion region = regions.get(0); |
|
|
|
@ -268,6 +273,11 @@ public class ResourceHttpMessageWriter implements HttpMessageWriter<Resource> { |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static Mono<Void> handleInvalidRange(ServerHttpResponse response) { |
|
|
|
|
|
|
|
response.setStatusCode(HttpStatus.REQUESTED_RANGE_NOT_SATISFIABLE); |
|
|
|
|
|
|
|
return response.setComplete(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private Mono<Void> writeSingleRegion(ResourceRegion region, ReactiveHttpOutputMessage message, |
|
|
|
private Mono<Void> writeSingleRegion(ResourceRegion region, ReactiveHttpOutputMessage message, |
|
|
|
Map<String, Object> hints) { |
|
|
|
Map<String, Object> hints) { |
|
|
|
|
|
|
|
|
|
|
|
|