2012-04-08 13 views
0

Ich versuche meine Anwendung so zu programmieren, dass Bilder hochgeladen und in einem Ordner gespeichert werden. Es druckt die Details der Datei aus, speichert sie jedoch nicht im Ordner. Ich folge dem Benutzerhandbuch und beantworte hier und ich weiß immer noch nicht, was ich falsch mache?Dateien hochladen und in einem Ordner speichern?

import java.io.File; 
import java.util.List; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.apache.commons.fileupload.FileItem; 
import org.apache.commons.fileupload.FileUploadException; 
import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 

public class UploadAvatarCommand implements Command { 

    @Override 
    public String execute(HttpServletRequest request, 
      HttpServletResponse response) { 

     DiskFileItemFactory factory = new DiskFileItemFactory(); 
     String contextRoot = request.getServletContext().getRealPath("/"); 
     factory.setRepository(new File(contextRoot + "WEB-INF/tmp")); 
     ServletFileUpload upload = new ServletFileUpload(factory); 

     try { 
      List<FileItem> items = upload.parseRequest(request); 
      for (FileItem item : items) { 
       if (!item.isFormField()) { 
        // Process form file field (input type="file"). 
        System.out.println("Field name: " + item.getFieldName()); 
        System.out.println("File name: " + item.getName()); 
        System.out.println("File size: " + item.getSize()); 
        System.out.println("File type: " + item.getContentType()); 

        String fileName = item.getName(); 
        try { 
         File saveFile = new File(fileName); 
         saveFile.createNewFile(); 
         item.write(saveFile); 
        } catch (Exception e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 
      } 
     } catch (FileUploadException e) { 
      try { 
       throw new ServletException("Cannot parse multipart request.", e); 
      } catch (ServletException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
     } 

     return "profile"; 
    } 

} 
+0

Sie sollten fileName und saveFile.getPath() auf Ihrer Konsole ausdrucken. Wo suchst du die Datei? – rickz

+0

Sie erhalten eine Ausnahme? Können Sie uns senden, wie laden Sie die Datei hoch? – dash1e

Antwort

0

Wenn Sie haben keinen Fehler dann dieses Stück Code:

File saveFile = new File(fileName); 
saveFile.createNewFile(); 
item.write(saveFile); 

erstellt eine neue Datei mit dem Namen fileName (das ist nur ein einfacher Name wie „file.txt“) im aktuellen Ordner.

Wenn Sie wissen möchten, welche Ihre aktuelle Arbeitsmappen ist zu versuchen, diese zu drucken:

System.out.println("Current folder: " + (new File(".")).getCanonicalPath()) 

so können Sie überprüfen, ob die Dateien hier sind.

Dann wollen, wenn Sie Dateien auf den Ordner setzen, die Sie Sie verwenden können, wünschen:

File saveFile = new File("/my/upload/folder",fileName); 

und ersetzen „/ my/upload/Ordner“ mit dem Pfad des Ordners, den Sie bevorzugen.

+0

'neue Datei (". ")). GetCanonicalPath()' zeigt meinen Eclipse-Stammordner an. Gibt es eine Möglichkeit, Bilder in meinen Projektordner in meinem Arbeitsbereich (der sich nicht in meinem Eclipse-Ordner befindet) zu speichern? – Jonathan

+0

Schau, wo ich schreibe "_then, wenn Sie Dateien auf ..._ setzen möchten" Ich erkläre Ihnen, wie es geht. – dash1e

+0

Ja, ich habe das verstanden. Das funktioniert: 'neue Datei (" ../ Workspace/Project2/My_Application/WebContent/images/"+ Dateiname);' Gibt es keinen besseren Weg, der besser verwaltet werden kann, wenn ich die Anwendung auf einen Produktionsserver verschiebe? – Jonathan

Verwandte Themen