|
|
|
@ -508,22 +508,20 @@ public class ResourceHttpRequestHandler extends WebContentGenerator |
|
|
|
|
|
|
|
|
|
|
|
// Check the media type for the resource
|
|
|
|
// Check the media type for the resource
|
|
|
|
MediaType mediaType = getMediaType(request, resource); |
|
|
|
MediaType mediaType = getMediaType(request, resource); |
|
|
|
|
|
|
|
setHeaders(response, resource, mediaType); |
|
|
|
|
|
|
|
|
|
|
|
// Content phase
|
|
|
|
// Content phase
|
|
|
|
if (METHOD_HEAD.equals(request.getMethod())) { |
|
|
|
if (METHOD_HEAD.equals(request.getMethod())) { |
|
|
|
setHeaders(response, resource, mediaType); |
|
|
|
|
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ServletServerHttpResponse outputMessage = new ServletServerHttpResponse(response); |
|
|
|
ServletServerHttpResponse outputMessage = new ServletServerHttpResponse(response); |
|
|
|
if (request.getHeader(HttpHeaders.RANGE) == null) { |
|
|
|
if (request.getHeader(HttpHeaders.RANGE) == null) { |
|
|
|
Assert.state(this.resourceHttpMessageConverter != null, "Not initialized"); |
|
|
|
Assert.state(this.resourceHttpMessageConverter != null, "Not initialized"); |
|
|
|
setHeaders(response, resource, mediaType); |
|
|
|
|
|
|
|
this.resourceHttpMessageConverter.write(resource, mediaType, outputMessage); |
|
|
|
this.resourceHttpMessageConverter.write(resource, mediaType, outputMessage); |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
else { |
|
|
|
Assert.state(this.resourceRegionHttpMessageConverter != null, "Not initialized"); |
|
|
|
Assert.state(this.resourceRegionHttpMessageConverter != null, "Not initialized"); |
|
|
|
response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes"); |
|
|
|
|
|
|
|
ServletServerHttpRequest inputMessage = new ServletServerHttpRequest(request); |
|
|
|
ServletServerHttpRequest inputMessage = new ServletServerHttpRequest(request); |
|
|
|
try { |
|
|
|
try { |
|
|
|
List<HttpRange> httpRanges = inputMessage.getHeaders().getRange(); |
|
|
|
List<HttpRange> httpRanges = inputMessage.getHeaders().getRange(); |
|
|
|
@ -532,7 +530,7 @@ public class ResourceHttpRequestHandler extends WebContentGenerator |
|
|
|
HttpRange.toResourceRegions(httpRanges, resource), mediaType, outputMessage); |
|
|
|
HttpRange.toResourceRegions(httpRanges, resource), mediaType, outputMessage); |
|
|
|
} |
|
|
|
} |
|
|
|
catch (IllegalArgumentException ex) { |
|
|
|
catch (IllegalArgumentException ex) { |
|
|
|
response.setHeader("Content-Range", "bytes */" + resource.contentLength()); |
|
|
|
response.setHeader(HttpHeaders.CONTENT_RANGE, "bytes */" + resource.contentLength()); |
|
|
|
response.sendError(HttpServletResponse.SC_REQUESTED_RANGE_NOT_SATISFIABLE); |
|
|
|
response.sendError(HttpServletResponse.SC_REQUESTED_RANGE_NOT_SATISFIABLE); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -750,6 +748,7 @@ public class ResourceHttpRequestHandler extends WebContentGenerator |
|
|
|
if (mediaType != null) { |
|
|
|
if (mediaType != null) { |
|
|
|
response.setContentType(mediaType.toString()); |
|
|
|
response.setContentType(mediaType.toString()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (resource instanceof HttpResource) { |
|
|
|
if (resource instanceof HttpResource) { |
|
|
|
HttpHeaders resourceHeaders = ((HttpResource) resource).getResponseHeaders(); |
|
|
|
HttpHeaders resourceHeaders = ((HttpResource) resource).getResponseHeaders(); |
|
|
|
resourceHeaders.forEach((headerName, headerValues) -> { |
|
|
|
resourceHeaders.forEach((headerName, headerValues) -> { |
|
|
|
@ -765,6 +764,7 @@ public class ResourceHttpRequestHandler extends WebContentGenerator |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes"); |
|
|
|
response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|