загруженный почтовый файл возвращает ноль имеет 0 байтов в качестве размера - PullRequest
1 голос
/ 17 марта 2010

Я написал веб-приложение на 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;
    }

1 Ответ

1 голос
/ 17 марта 2010

URL не может получить доступ к файлам (напрямую) через WEB-INF.Я бы предложил использовать сервлет для возврата файла из того места, в котором он был сохранен на

Также предложил бы сохранить файл вне контекста вашего веб-приложения

...