Я пытаюсь сгенерировать zip-файл, добавив список файлов из пути к файлу.создание zip с использованием zipOutputStream и отправка его в javascript для загрузки файла по клику.Я пробовал разные способы сделать это, но не смог найти решение.Может ли кто-нибудь помочь в этом?Я новичок в кодировании на стороне Javascript.
Вот что я пытаюсь сделать:
Код контроллера:
@RequestMapping(value="/logsDownload", method=RequestMethod.POST)
@Produces("application/zip")
public @ResponseBody ResponseEntity <byte[]> zipFiles(Model model,@RequestBody String component,HttpServletRequest request) throws IOException{
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(byteArrayOutputStream);
ZipOutputStream zipOutputStream = new ZipOutputStream(bufferedOutputStream);
String logFileLocation = "";
ResponseEntity<byte[]> response = null;
try {
logFileLocation = devtestSupportProject.fetchLogs(component); // based on the component the file path will be decided
File dir = new File(logFileLocation);
File[] files = dir.listFiles();
for (File file : files) {
zipOutputStream.putNextEntry(new ZipEntry(file.getName()));
FileInputStream fileInputStream = new FileInputStream(file);
IOUtils.copy(fileInputStream, zipOutputStream);
fileInputStream.close();
zipOutputStream.closeEntry();
}
if (zipOutputStream != null) {
zipOutputStream.finish();
zipOutputStream.flush();
zipOutputStream.close();
}
bufferedOutputStream.close();
byteArrayOutputStream.close();
byte[] zipByteArray = byteArrayOutputStream.toByteArray();
response = new ResponseEntity<byte[]>(zipByteArray, HttpStatus.OK);
}catch(Exception exp) {
logger.error(exp.getMessage(),exp);
byte[] error = exp.getMessage().getBytes();
response = new ResponseEntity<byte[]>(error, HttpStatus.SERVICE_UNAVAILABLE);
return response;
}
Код Javascript:
$http.post("logsDownload",$scope.component, {responseType:'arraybuffer'}).then(function successCallback(response) {
var blob = new blob([response], {'type':"application/zip"});
var fileUrl = window.URL.createObjectURL(file);
var filename = "logs.zip";
var element = document.createElement("a");
element.style.display = 'none';
document.body.appendChild(element);
element.href = fileURL;
element.download = fileName;
document.body.removeChild(element);
});