arquivo zip baixado retorna zero tem 0 bytes como tamanho

Eu escrevi uma aplicação web Java que permite ao usuário baixar arquivos de um servidor. Esses arquivos são muito grandes e, portanto, são compactados juntos antes do download.

Funciona assim:
1. O usuário recebe uma lista de arquivos que correspondem aos seus critérios
2. Se o usuário gostar de um arquivo e quiser fazer o download, ele o selecionará marcando uma checkbox de seleção.
3. O usuário clica em “download”
4. Os arquivos são então compactados e armazenados em um servidor
5. O usuário então apresentou uma página que contém um link para o arquivo zip que pode ser baixado
6. No entanto, ao baixar o arquivo zip, o arquivo baixado é de 0 bytes no tamanho

Eu verifiquei o servidor remoto eo arquivo zip está sendo criado corretamente, tudo o que resta é servir o arquivo do usuário de alguma forma, você pode ver onde eu poderia estar errado, ou sugerir uma maneira melhor de servir o arquivo zip.

O código que cria o link é:

 

<a href="https://stackoverflow.com/questions/2459799/downloaded-zip-file-returns-zero-has-0-bytes-as-size/ ">Zip File Link

O código que cria a variável zipFileURL é:

 public static String zipFiles(ArrayList 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; }