JSP kann Dateien über HTML-Formulare auf den Server hochladen. Der Dateityp kann eine Textdatei, eine Binärdatei, eine Bilddatei oder ein beliebiges anderes Dokument sein.
Als nächstes verwenden wir HTML-Tags, um das Datei-Upload-Formular zu erstellen. Folgende Punkte sollten beachtet werden:
Das Formularmethodenattribut muss auf die POST-Methode festgelegt werden und die GET-Methode kann nicht verwendet werden.
Das Formular-Enctype-Attribut muss auf multipart/form-data gesetzt werden.
Das Formularaktionsattribut muss auf die JSP-Dateiadresse festgelegt werden, die zum Hochladen der Datei im Hintergrund übermittelt wird. Beispielsweise wird die Programmdatei uploadFile.jsp zum Verarbeiten hochgeladener Dateien verwendet.
Um ein Dateielement hochzuladen, müssen Sie das Tag <input .../> verwenden und das Attribut auf type="file" setzen. Wenn Sie mehrere Dateien hochladen müssen, können Sie im Tag <input .../> unterschiedliche Namen festlegen.
Das folgende Formular zum Hochladen von Dateien sieht wie folgt aus:
<html><head><title>Formular zum Hochladen von Dateien</title></head><body><h3>Datei-Upload:</h3>Wählen Sie eine Datei zum Hochladen aus: <br /><form action="UploadServlet" method="post" enctype="multipart/form-data"><input type="file" name="file" size="50" /><br /><input type="submit" value="Datei hochladen " /></form></body></html>Greifen Sie in Ihrem lokalen Browser auf die Datei zu. Wenn Sie auf „Datei hochladen“ klicken, wird ein Fenster angezeigt, in dem Sie die hochzuladende Datei auswählen können:
Zuerst definieren wir den Speicherort, an dem die Datei nach dem Hochladen im Dienst gespeichert wird. Sie können den Pfad in Ihr Programm schreiben oder das Verzeichnis festlegen, in dem die Datei gespeichert wird, indem wir das context-param-Element in der web.xml festlegen Konfigurationsdatei wie folgt anzeigen:
<web-app>....<context-param> <description>Datei-Upload-Adresse</description> <param-name>file-upload</param-name> <param-value> c:apache-tomcat- 5.5.29webappsdata </param-value> </context-param>....</web-app>
Die folgende Skriptdatei UploadFile.jsp kann mehrere hochgeladene Dateien verarbeiten. Bevor wir dieses Skript verwenden, müssen wir die folgenden Punkte beachten:
Das folgende Beispiel basiert auf FileUpload, daher müssen Sie die neueste Paketdatei commons-fileupload.xxjar in Ihren Klassenpfad einfügen. Die Download-Adresse lautet: http://commons.apache.org/fileupload/.
FileUpload basiert auf Commons IO, daher müssen Sie das neueste commons-io-xxjar in Ihren Klassenpfad einfügen. Die Download-Adresse lautet: http://commons.apache.org/io/.
Beim Testen des folgenden Beispiels müssen Sie den Upload durchführen und bestätigen, dass die hochgeladene Dateigröße kleiner ist als die durch die Variable maxFileSize festgelegte Größe, andernfalls kann die Datei nicht erfolgreich hochgeladen werden.
Stellen Sie sicher, dass Sie die Verzeichnisse c:temp und c:Apache-tomcat-5.5.29webappsdata erstellt haben.
<%@ page import="java.io.*,java.util.*, javax.servlet.*" %><%@ page import="javax.servlet.http.*" %><%@ page import= "org.apache.commons.fileupload.*" %><%@ Seite import="org.apache.commons.fileupload.disk.*" %><%@ Seite import="org.apache.commons.fileupload.servlet.*" %><%@ page import="org.apache.commons.io.output.*" %><% File file = 5000 * 1024; int maxMemSize = 5000 * 1024; ServletContext context = pageContext.getServletContext(); context.getInitParameter("file-upload"); // Überprüfen Sie den Typ des hochgeladenen Inhalts String contentType = request.getContentType(); if ((contentType.indexOf("multipart/form-data") >= 0)) { DiskFileItemFactory Factory = new DiskFileItemFactory(); // Legen Sie die maximale Größe der im Speicher gespeicherten Dateien fest. Factory.setSizeThreshold(maxMemSize); Lokal gespeicherte Daten sind größer als maxMemSize. Factory.setRepository(new File("c:\temp")); // Einen neuen Datei-Upload-Handler erstellen ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax( maxFileSize ); try{ // Die erhaltene Datei analysieren List fileItems = upload.parseRequest(request); Hochgeladene Dateien verarbeiten Iterator i = fileItems.iterator(); out.println("<head>"); out.println("<title>JSP File upload</title>" ); out.println("</head>"); out.println("<body>"); while ( i.hasNext () ) { FileItem fi = (FileItem)i.next(); if ( !fi.isFormField() ) { // Holen Sie sich die Parameter der hochgeladenen Datei String fieldName = fi.getFieldName(); String fileName = fi.getName(); .isInMemory (); long sizeInBytes = fi.getSize(); // In Datei schreiben if( fileName.lastIndexOf("\") >= 0 ){ file = new File( filePath , fileName.substring( fileName.lastIndexOf("\")) ; }else{ file = new File( filePath , fileName.substring(fileName.lastIndexOf("\")) } fi.write( file ) ; out.println("Hochgeladener Dateiname: " + filePath + fileName + "<br>"); out.println("</body>"); out.println("</html>"); }catch(Exception ex) { System.out.println(ex); html>"); out.println("<head>"); out.println("<title>Servlet upload</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>Keine Datei hochgeladen</p>"); out.println("</html> "); }%>
Als nächstes greifen wir über den Browser auf http://localhost:8080/UploadFile.htm zu. Die Schnittstelle ist wie unten gezeigt und lädt die Datei hoch:
Wenn Ihr JSP-Skript normal ausgeführt wird, wird die Datei nach c:apache-tomcat-5.5.29webappsdata hochgeladen. Sie können den Ordner öffnen, um zu sehen, ob der Upload erfolgreich ist.