下载的zip文件返回零,大小为0字节

时间:2010-03-17 03:50:26

标签: java web-applications download

我编写了一个Java Web应用程序,允许用户从服务器下载文件。这些文件非常大,因此在下载之前将它们压缩在一起。

它的工作原理如下:
1.用户获得符合他/她的标准的文件列表
2.如果用户喜欢文件并想要下载,他/她通过选中复选框来选择它 3.然后用户点击“下载”
4.然后将文件压缩并存储在服务器上 5.然后,用户会看到一个页面,其中包含可下载zip文件的链接 6.但是,在下载zip文件时,下载的文件大小为0字节

我已经检查了远程服务器并正确创建了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;
    }

1 个答案:

答案 0 :(得分:1)

URL无法访问WEB-INF下的任何文件(直接)。我建议使用servlet将文件从保存到

的任何位置返回

还建议将文件保存在webapp的上下文之外