Я хочу создать ZIP файл, содержащий мои zipped файлы, которые я получаю из бэкэнд, а затем отправить этот файл пользователю. В течение 2 дней я искал ответ и не мог найти правильное решение, может быть, вы можете мне помочь:)
На данный момент код выглядит следующим образом: (я знаю, что я не должен делать все это в контроллере spring, но не заботясь об этом, он просто предназначен для тестирования, чтобы найти способ заставить его работать)
@RequestMapping(value = "/zip")
public byte[] zipFiles(HttpServletResponse response) throws IOException{
//setting headers
response.setContentType("application/zip");
response.setStatus(HttpServletResponse.SC_OK);
response.addHeader("Content-Disposition", "attachment; filename=\"test.zip\"");
//creating byteArray stream, make it bufforable and passing this buffor to ZipOutputStream
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(byteArrayOutputStream);
ZipOutputStream zipOutputStream = new ZipOutputStream(bufferedOutputStream);
//simple file list, just for tests
ArrayList<File> files = new ArrayList<>(2);
files.add(new File("README.md"));
//packing files
for (File file : files) {
//new zip entry and copying inputstream with file to zipOutputStream, after all closing streams
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();
IOUtils.closeQuietly(zipOutputStream);
}
IOUtils.closeQuietly(bufferedOutputStream);
IOUtils.closeQuietly(byteArrayOutputStream);
return byteArrayOutputStream.toByteArray();
}
Но проблема в том, что с использованием кода, когда я ввожу URL: localhost: 8080/zip Я получаю файл: test.zip.html вместо zip файла
Когда я удаляю расширение .html и оставляю только test.zip, он правильно открывается, чтобы избежать возврата этого расширения .html? почему он добавлен?
Я понятия не имею, что еще я могу сделать. Я также пытался заменить ByteArrayOuputStream примерно следующим образом:
OutputStream outputStream = response.getOutputStream();
и установите метод void, чтобы он ничего не возвращал, но создал .zip файл, который был поврежден?
На моем macbook после распаковки test.zip я получал test.zip.cpgz, который снова давал мне файл test.zip и т.д.
В окнах файл .zip был поврежден, как я сказал, и даже не смог его открыть.
Я также предполагаю, что удаление расширения .html автоматически будет лучшим вариантом, но как? Надеюсь, что это не так сложно, как кажется:) спасибо