Я написал веб-сервис rest для создания zip-файла в виде кусков, используя mime-тип application_octet_stream
с использованием весенней загрузки (2.0.5.RELEASE), но я не могу получить partial_content(206)
в качестве вывода, когда я указываюдиапазон, используя команду curl, как показано ниже, но я получаю 200 (ОК) в качестве ответа, т.е. я не могу получить файл с точки зрения кусков.
curl http://localhost:8080/resource/getlist -i -H "Range: bytes=0-100"
PS: приложение с загрузочной пружиной развернуто на внешнемJetty Server и IAM не используют встроенный Tomcat и Jetty Server, где исключения сделаны в pom.xml. Это связано с различными проектными причинами.
Есть ли какие-либо дополнения / изменения конфигурации, которые мне нужно сделать на внешнемДжетти сервер?
Код как показано ниже
@RestController
@RequestMapping("/resource")
public class ListResource {
/* Logger **/
private static final Logger _LOG = LoggerFactory.getLogger(ListResource.class);
@Autowired
private AppContext appContext;
private static final String DATE_FORMAT_FOR_ETAG = "yyyy-MM-dd HH:mm:ss'Z'";
private static final DateFormat eTagDateFormat = new SimpleDateFormat(DATE_FORMAT_FOR_ETAG, Locale.US);
private static final String ACCEPT_RANGES_BYTES = "bytes";
@RequestMapping(path = "/getlist", method = RequestMethod.HEAD)
public ResponseEntity<?> fetchListHead() throws IOException {
return fetchList(true);
}
@RequestMapping(path = "/getlist", method = RequestMethod.GET,produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public ResponseEntity<?> fetchListGet() throws IOException {
return fetchList(false);
}
private ResponseEntity<?> fetchList(final boolean justHead) throws IOException {
File file = null;
try {
file = new File("/home/resource/hello.zip");
byte[] readBytes = Files.readAllBytes(file.toPath());
ByteArrayResource resource = new ByteArrayResource(readBytes);
ResponseEntity.BodyBuilder responseBuilder = ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getName() + "\"")
.header(HttpHeaders.ACCEPT_RANGES, ACCEPT_RANGES_BYTES)
.lastModified(new Date().getTime())
.eTag(getETag(file))
.cacheControl(CacheControl.maxAge(3600, TimeUnit.SECONDS).cachePublic().mustRevalidate())
.contentLength(file.length())
.contentType(MediaType.parseMediaType(MediaType.APPLICATION_OCTET_STREAM_VALUE));
return justHead ? responseBuilder.build() : responseBuilder.body(resource);
} catch (Exception e) {
_LOG.error("Error in gettingResource:{}", e.getMessage());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
private String getETag(File file) {
String tag = "";
if (file != null) {
tag = eTagDateFormat.format(new Date(file.getAbsoluteFile().lastModified()));
}
return tag;
}
}