Я написал веб-приложение на Java, которое позволяет пользователю загружать файлы с сервера. Эти файлы довольно большие и поэтому перед загрузкой архивируются вместе.
Работает так:
1. Пользователь получает список файлов, которые соответствуют его / ее критериям
2. Если пользователю нравится файл и он хочет скачать, он выбирает его, установив флажок
3. Затем пользователь нажимает «скачать»
4. Затем файлы архивируются и сохраняются на сервере.
5. Затем пользователю предоставляется страница со ссылкой на загружаемый ZIP-файл.
6. Однако при загрузке zip-файла размер загружаемого файла составляет 0 байт
Я проверил удаленный сервер, и zip-файл создается правильно, все, что осталось, это как-то обработать файл пользователю, можете ли вы увидеть, где я могу ошибаться, или предложить лучший способ обслуживания zip файл.
Код, который создает ссылку:
<%
String zipFileURL = (String) request.getAttribute("zipFileURL"); %>
<p><a href="<% out.print(zipFileURL); %> ">Zip File Link</a></p>
Код, который создает переменную zipFileURL:
public static String zipFiles(ArrayList<String> fileList, String contextRootPath) {
//time-stamping
Date date = new Date();
Timestamp timeStamp = new Timestamp(date.getTime());
Iterator fileListIterator = fileList.iterator();
String zipFileURL = "";
try {
String ZIP_LOC = contextRootPath + "WEB-INF" + SEP + "TempZipFiles" + SEP;
BufferedInputStream origin = null;
zipFileURL = ZIP_LOC
+ "FITS." + timeStamp.toString().replaceAll(":", ".").replaceAll(" ", ".") + ".zip";
FileOutputStream dest = new FileOutputStream(ZIP_LOC
+ "FITS." + timeStamp.toString().replaceAll(":", ".").replaceAll(" ", ".") + ".zip");
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
dest));
// out.setMethod(ZipOutputStream.DEFLATED);
byte data[] = new byte[BUFFER];
while(fileListIterator.hasNext()) {
String fileName = (String) fileListIterator.next();
System.out.println("Adding: " + fileName);
FileInputStream fi = new FileInputStream(fileName);
origin = new BufferedInputStream(fi, BUFFER);
ZipEntry entry = new ZipEntry(fileName);
out.putNextEntry(entry);
int count;
while ((count = origin.read(data, 0, BUFFER)) != -1) {
out.write(data, 0, count);
}
origin.close();
}
out.close();
} catch (Exception e) {
e.printStackTrace();
}
return zipFileURL;
}