загрузить файл в JSP - как изменить путь по умолчанию для загруженного файла - PullRequest
3 голосов
/ 05 августа 2009

У меня есть две страницы jps для загрузки одного файла. Вот код для выбора файла:

 org.apache.commons.io.FilenameUtils, java.util.*, 
 java.io.File, java.lang.Exception" %>
...
 <form name="uploadFile" method="POST" action="processUpload.jsp"     
 enctype="multipart/form-data">
     <input type="file" name="myfile"><br />
     <input type="submit" value="Submit" />
 </form>
 ....

// -------- обработать загруженный файл ---------------------

<%@ page contentType="text/html;charset=windows-1252"%>
<%@ page import="org.apache.commons.fileupload.DiskFileUpload"%>
<%@ page import="org.apache.commons.fileupload.FileItem"%>
<%@ page import="java.util.List"%>
<%@ page import="java.util.Iterator"%>
<%@ page import="java.io.File"%>


<%
    System.out.println("Content Type ="+request.getContentType());
    System.out.println("Cookies" + request.getCookies());

    DiskFileUpload fu = new DiskFileUpload();
    // If file size exceeds, a FileUploadException will be thrown
    fu.setSizeMax(1000000);

    List fileItems = fu.parseRequest(request);
    Iterator itr = fileItems.iterator();

    while(itr.hasNext()) {
      FileItem fi = (FileItem)itr.next();

      //Check if not form field so as to only handle the file inputs
      //else condition handles the submit button input
      if(!fi.isFormField()) {
        System.out.println("\nNAME: "+fi.getName());
        System.out.println("SIZE: "+fi.getSize());
        //System.out.println(fi.getOutputStream().toString());
        File fNew= new File(application.getRealPath("/"), fi.getName());

        System.out.println(fNew.getAbsolutePath());
        fi.write(fNew);
      }
      else {
        System.out.println("Field ="+fi.getFieldName());
      }
    }
 %>

Этот код помещает файл в мою папку build \ web. Как установить путь к другому каталогу на сервере (при условии, что права на запись установлены)? Спасибо,

Ответы [ 4 ]

2 голосов
/ 05 августа 2009

Используйте следующий код (адаптированный для руководства пользователя ):

// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(dir);

// Create a new file upload handler
DiskFileUpload upload = new DiskFileUpload(factory);

// Parse the request
List /* FileItem */ items = upload.parseRequest(request);
0 голосов
/ 06 августа 2009

Почему бы просто не указать путь при создании файла? Вы можете установить путь как часть конфигурации вашего приложения (JNI) или как системное свойство при запуске веб-сервера (используя -Dpath = ...) и читать его с помощью System.getProperty ("path"). Вы даже можете использовать переменную среды, определенную в вашей системе, и прочитать эту переменную среды, используя метод System.getenv .

Альтернативно, вы можете создать только временный файл, используя метод File.getTempFile. Если вам просто нужно сохранить файл, чтобы что-то с ним сделать, и никогда не использовать его снова, это лучший вариант - тем не менее, вы должны удалить файл самостоятельно после его использования.

0 голосов
/ 05 августа 2009

Чтобы установить путь загрузки файла:

<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(new File('/path/to/store/files'));
DiskFileUpload fu = new DiskFileUpload(factory);
0 голосов
/ 05 августа 2009

... попробуйте что-то вроде этого:

File newFile = new File(request.getSession().getServletContext().getRealPath("/someUploadDirectoryOnServer/"), multipartFile.getOriginalFilename());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...