Я использую этот REST API
@GET
@Path("/get-file")
@Consumes(MediaType.APPLICATION_JSON + ";charset=UTF-8")
public void getFile(@Context HttpServletRequest request, @Context HttpServletResponse response,
@QueryParam("filePath") String filePath, @QueryParam("fileName") String fileName) throws IOException {fileName);
File fileToDownload = new File(filePath);
if (fileToDownload.exists()) {
java.nio.file.Path path = Paths.get(fileToDownload.toURI());
response.setContentType(MediaType.APPLICATION_OCTET_STREAM);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + fileName);
try {
response.setHeader(HttpHeaders.CONTENT_LENGTH, Long.toString(Files.size(path)));
Files.copy(path, response.getOutputStream());
response.flushBuffer();
} catch (IOException e) {
log.error(e.getLocalizedMessage(), e);
throw e;
}
} else {
throw new FileNotFoundException();
}
}
для загрузки файлов, созданных с сервера. Все работает нормально, если размер файла, который я пытаюсь получить, меньше 50 ГБ (более или менее), но когда я пытаюсь загрузить 50 ГБ при использовании Chrome, я получаю исключение java.net.SocketException: Connection reset
. Этого не происходит в Firefox, и я могу получить файл как обычно.
Это то, что я вижу на вкладке Chrome Network:
Chrome Вкладка «Сеть»
Загрузка файла - единственная операция, которую я выполняю, и она сразу же терпит неудачу. Если я опущу заголовок CONTENT_LENGTH
в ответе, размер ответа достигнет 48 ГБ ~, а затем я получу ту же ошибку.
Кто-нибудь знает об этом? На стороне сервера я использую Java 7 (я тоже пробовал с Java 8), а на стороне клиента я использую AngularJS v1.5.11. Я использую ApacheTomcat для развертывания своего приложения. Дайте мне знать, если вам понадобится дополнительная информация о проблеме.