2009-06-12 6 views
0

Ich muss eine Datei hochladen mit Apache Fileupload mit ProgressListener, aber ich muss auch die Fortschrittsbalken für den Upload-Status zeigen.Hilfe mit Datei-Upload in Java/J2EE

Aktuelle Voraussetzung ist, ich brauche nur eine lokale XML-Datei zu analysieren, die XML in geeignete Objekte zu analysieren und sie in Datenbank. Muss ich wirklich die Datei zum Server hochladen, um es zu analysieren. Wie bekomme ich Ausnahme wie Datei nicht auf Remote-Server gefunden, während es auf meinem lokalen m/c läuft.

Jede schnelle Hilfe wäre willkommen.

Vielen Dank im Voraus !!!

Antwort

1

Wenn Sie Zugriff auf die Server-Seite haben, empfehle ich, den Upload-Prozess zu debuggen. Die Ausnahme schlägt vor, dass Sie die Datei auf dem Server basierend auf dem hochgeladenen Dateinamen öffnen möchten. Auf Ihrem lokalen Rechner funktioniert das, weil es auf demselben Dateisystem läuft. Auf der Serverseite empfängt die Apache Fileupload-Binärdaten, die von dem Anforderungsdatenstrom extrahiert werden muss:


@Override 
protected void service(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
    if (ServletFileUpload.isMultipartContent(request)) { 
    FileItemFactory factory = new DiskFileItemFactory(Integer.MAX_VALUE, null); 
    ServletFileUpload upload = new ServletFileUpload(factory); 
    List items = upload.parseRequest(request); 
    for (FileItem item : items) { 
     byte[] data = item.get(); 
     // do something with the binary data 
    } 
    } else { 
    System.err.println("Not a multipart/form-data"); 
    } 
} 

Und Sie müssen auch die Form sein:

 
<form name='frm' method="POST" action='UploadServlet' 
id="frm" enctype="multipart/form-data">
0

Aus Ihrer Beschreibung es klingt wie Ihr Servlet versucht, die Datei aus dem Dateisystem selbst zu lesen, basierend auf dem Dateinamen im Formular übermittelt. Dies funktioniert nicht, wenn das Servlet auf einem anderen Computer als auf der Datei ausgeführt wird.

Stellen Sie sicher, dass Ihr Servlet den Dateiinhalt von der Dateiupload-API bezieht und nicht vom lokalen Dateisystem.