В моем приложении я заархивирую, а затем загружаю большие файлы, файлы расположены в лазури, поэтому я читаю файлы из потока, а затем архивирую их один за другим, чтобы я мог загрузить файл zip после того, как все файлыбыл заархивирован, вот мой код:
@RequestMapping(value = "{analyseId}/download", method = RequestMethod.GET, produces = "application/zip")
public ResponseEntity<Resource> download(@PathVariable List<String> paths) throws IOException {
String zipFileName = "zipFiles.zip";
File zipFile = new File(zipFileName);
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos);
for (String path : paths) {
InputStream fis = azureDataLakeStoreService.readFile(path);
addToZipFile(path , zos, fis);
}
zos.close();
fos.close();
BufferedInputStream zipFileInputStream = new BufferedInputStream(new FileInputStream(zipFile.getAbsolutePath()));
InputStreamResource resource = new InputStreamResource(zipFileInputStream);
zipFile.delete();
return ResponseEntity.ok()
.header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION)
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + zipFileName)
.contentType(MediaType.parseMediaType("application/octet-stream"))
.body(resource);
}
private static void addToZipFile(String path, ZipOutputStream zos, InputStream fis) throws IOException {
ZipEntry zipEntry = new ZipEntry(FilenameUtils.getName(path));
zos.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
zos.closeEntry();
fis.close();
}
Однако в Azure время ожидания запроса установлено на 230 секунд, и нельзя изменить , однако для больших файлов требуется больше, чем длязагрузите, а затем заархивируйте файлы на сервере, чтобы тем временем соединение с клиентом было потеряно.
Поэтому мой вопрос в том, что, поскольку я получаю данные из потока, мы можем выполнить все эти операции одновременно,означает получение потока и загрузку его в одно и то же время, а не ожидание получения всего файла или, если есть какая-либо другая идея, может ли кто-нибудь поделиться им здесь, пожалуйста.
Спасибо.