2009-08-05 3 views
3

Ich habe zwei JP-Seiten für den Upload der einzelnen Datei. Hier ist ein Code für die Auswahl einer Datei:Datei in JSP hochladen - Wie ändere ich einen Standardpfad für die hochgeladene Datei?

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> 
.... 

// -------- hochgeladene Datei handhaben -------------------- -

<%@ 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()); 
     } 
    } 
%> 

Dieser Code stellen eine Datei in meinem Build \ Web-Ordner. Wie setze ich einen Pfad zu einem anderen Verzeichnis auf dem Server (vorausgesetzt, die Schreibrechte sind gesetzt)? Danke,

Antwort

2

Verwenden Sie den folgenden Code (angepasst für den user guide):

// 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

Es hat funktioniert. Es geht auf den richtigen Weg. – Greener

-1

... versuchen, etwas wie folgt aus:

File newFile = new File(request.getSession().getServletContext().getRealPath("/someUploadDirectoryOnServer/"), multipartFile.getOriginalFilename()); 
0

Um eine Datei-Upload-Pfad festgelegt:

<%@ 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

Beachten Sie außerdem, dass DiskFileUpload veraltet ist und Sie ServletFileUpload (oder PortletFileUpload) verwenden sollten. – Powerlord

0

Warum einfach den Pfad beim Erstellen der Datei nicht angeben? Sie können den Pfad als Teil Ihrer Anwendungskonfiguration (JNI) oder als Systemeigenschaft festlegen, wenn der Webserver gestartet wird (mithilfe von -Dpath = ...), und ihn mit System.getProperty ("Pfad") lesen. Sie können sogar eine auf Ihrem System definierte Umgebungsvariable verwenden und diese Umgebungsvariable mit der Methode System.getenv lesen.

Alternativ könnten Sie nur eine temporäre Datei mit der File.getTempFile-Methode erstellen. Wenn Sie nur die Datei speichern müssen, um etwas damit zu tun und sie nie wieder zu verwenden, ist das eine bessere Option - trotzdem müssen Sie die Datei selbst löschen, nachdem Sie sie benutzt haben.

Verwandte Themen