In der Entwicklung von Webanwendungen werden Datei -Upload- und Downloadfunktionen sehr häufig verwendete Funktionen. Der folgende Artikel führt Sie in eine detaillierte Erklärung des Uploads von Javaweb -Dateien und Download -Beispielen vor.
Für das Datei -Upload leitet der Browser die Datei während des Upload -Prozesses in Form eines Streams auf den Server. Es ist problematischer, wenn Sie Servlet direkt verwenden, um den Eingabestream der hochgeladenen Datei zu erhalten und dann die Anforderungsparameter zu analysieren. Daher wird im Allgemeinen ausgewählt, um die Common-FileUpload der Datei-Upload-Komponente des Apache Open Source-Tools zu verwenden. Das JAR-Paket der Common-FileUpload-Upload-Komponente kann auf der offiziellen Website von Apache heruntergeladen werden. Common-FileUpload hängt vom Common-IO-Paket ab. Sie müssen dieses Paket auch herunterladen.
1. Datei -Upload
JSP -Upload -Seite
Die folgenden Vorsichtsmaßnahmen sind erforderlich, um Komponenten hochzuladen
Formularform: method = ”post” EncTTePe = ”MultiPart/Form-Data”
Gehört zur Domäne: Eingabe type = "Datei" name = "Datei" size = "50"
Diese beiden Punkte werden wie folgt erfolgen und angezeigt
< %@ page contentType = "text/html; charset = utf-8" Sprache = "Java" %> <html> <kopf> <title> Upload-Test uplad </title> </head> <body> <Form Action = "DealWitHuPload.jsp" method = "post" enctype = "multiVETRART/Form-data" <"<50". Typ = "Senden" name = "surug" value = "enden"> </form> </body> </html>
Web.xml Konfiguration hochladen Pfad
Der Upload -Pfad kann auch direkt in den Code geschrieben werden, die Konfiguration ist jedoch hier bequem, um ihn zu ändern.
<Context-Param> <BEKRESCHNISS> Speicherplatz in die hochgeladene Datei </Beschreibung> <param-name> file-Upload </param-name> <param-Value> e: // temp // </param-Value> </context-param>
Handle hochgeladene JSP
<%@ page contentType = "text/html; charSet = utf-8" Sprache = "java"%> <%@ page import = "org.apache.commons.FileUpload.FileItem, org.apache.commons.FileUpload.disk.diskFileMfactory, org.apache.commons.FileUpload.servlet.servletFileUpload " %> < %@ page import =" java.io.file 1024; servletContext context = pageContext.getServletContext (); String filepath = context.getInitParameter ("Datei-Upload"); // RELAD Den hochladen Pfad hochladen in der Konfigurationsdatei contentType = Anfrage ((contentType.contains ("MultiPart/Form-Data"))) {diskFileTemfactory Factory = new diskfileTemfactory (); // Erstellen Sie ein fest diskutiertes DateiItemFactory. Temporäres Verzeichnis zum Hochladen von ServletFileUpload Upload upload = new ServletFileUpload (Werksfabrik); // Erstellen eines Datei -Upload -Prozessors Upload.Setsizemax (MaxFileSize); // Setzen Sie die maximale Größe des Upload -Uploads von Dateien, Einheit Btry {ListeInitems = Upload. Sobald Iterator i = FileItems.iterator (); out.println ("<html>"); out.println ("<Head>"); out.println ("<title> JSP -Datei Upload </title>"); out.println ("</head>); ) {FileItem fi = (FileItem) I.Next (); if (! Fi.isformfield ()) // Wenn es sich um den Upload -Dateityp handelt, weil das Formular mit anderen Eingabetypen gemischt werden kann {String fieldName = fi.getfieldname (); // Rückgabe -Filestring -Filename = fi.getname. Endwith () an boolean isinmemory = fi.issinmemory (); // Long SizeInBytes = fi.getSize (); // Geben Sie die Dateigröße zurück // Schreiben Sie in die Datei. fileName.lastIndexOf("//"))) ;}else{file = new File( filePath ,fileName.substring(fileName.lastIndexOf("//")+1)) ;}fi.write( file ) ;out.println("Uploaded Filename: " + filePath +fileName + "<br>");}} out.println ("</body>"); out.println ("</html>");} catch (exception ex) {system.out.println (ex);}} else {out.println ("<html>") Upload </title> "); out.println (" </head> "); out.println (" <body> "); out.println (" <p> Keine Datei hochgeladen </p> "); out.println (" </body> ");2. Datei -Download
Die Datei Download Referenz zu Gushan Canglangs Blog, der ausführlich geschrieben und direkt verwendet wurde.
Die grundlegende Idee des Herunterladens lautet: Zuerst durchqueren Sie alle Dateien im Download -Verzeichnis und zeigen Sie sie dann auf der Seite an, der Client stellt eine Downloadanfrage an und der Server antwortet auf den Download.
Listen Sie alle Dateien im Download -Verzeichnis auf:
Die öffentliche Klasse ListFileServlet erweitert HttpServlet {public void dagget (httpServletRequest Request, HttpServletResponse-Antwort), die ServletException, IOException {// das Verzeichnis zum Hochladen der Datei stritchFilepath = thiswell-staartsxt (). MAP <string, String> filenamemap = new Hashmap <String, String> (); // Durchführen alle Dateien und Verzeichnisse im Verzeichnis filepath rekursiv und speichern Sie den Dateinamen der Datei in der MAP -Sammlungsliste (neue Datei (UploadFilePath), Filenamemap). Request.SetatTribute ("Filenamemap", Filenamemap); Request.GetRequestDispatcher ("/listfile.jsp"). Forward (Request, Antwort);}/*** @Method: Listfile* @Description: rekursiv alle Dateien mit der Storys -Datei -Datei, die eine Datei -Datei -Datei und eine Datei -Datei -Datei und eine Dateiverzeichnis und eine Datei -Datei -Datei -Datei -Direktorie und A -Datei -Direktorie* @Param -MAIS -MAIS -MAIS -MAIS -MAIS -MAIS -MAIS -MAIS -MAIS -MAIS -MAIS -MAIS -MAIS -MAIS -MAIS -MAIS -MAIS -MAIS. ListFile (Dateidatei, Map <String> Map) {// Wenn die Datei nicht eine Datei, sondern ein Verzeichnis if (! file.isfile ()) {// Auflisten Sie alle Dateien und Verzeichnisse in dieser Verzeichnisdatei [] = Datei.ListFile (); // transpraverse Dateien [] array für (Datei f: {// {//. Die hochgeladene Datei wird in Form des Namens von UUID_FILE umbenannt. Entfernen Sie die uUid_part der Dateinamendatei.getName (). INDEXOF ("_"), um den Speicherort des Zeichens "_" in der Zeichenfolge abzurufen. Wenn der Dateiname ähnlich ist: Datei.getName (). substring (Datei.getName (). IndexOf ("_")+1); // File.getName () Ruft den ursprünglichen Namen der Datei ab. Dieser Name ist eindeutig und kann als Schlüssel verwendet werden. Realname ist der verarbeitete Name. Es kann wiederholt werden map.put (Datei.getName (), RealName);}} public void dopost (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException, IOException {doget (Anfrage, Antwort);}} ausHier spreche ich kurz über die Listfile -Methode in ListFileServlet. Die ListFile -Methode wird verwendet, um alle Dateien im Verzeichnis aufzulisten. Die ListFile -Methode verwendet Rekursion. In der tatsächlichen Entwicklung erstellen wir definitiv eine Tabelle in der Datenbank, in der der hochgeladene Dateinamen und das spezifische Speicherverzeichnis der Datei gespeichert werden. Wir können das spezifische Speicherverzeichnis der Datei kennen, indem wir die Tabelle abfragen, und es müssen keine Rekursionsvorgänge verwendet werden. Dieses Beispiel liegt daran, dass in der Datenbank nicht der hochgeladene Dateiname und der spezifische Speicherort der Datei gespeichert sind und der Speicherort der hochgeladenen Datei zum Aufbrechen des Speichers verwendet wird, sodass eine Übernahme erforderlich ist. Während der Rekursion wird der erhaltene Dateiname in der Kartensammlung gespeichert, die von außen an die ListFile -Methode übergeben wird, sodass wir sicherstellen können, dass alle Dateien in derselben Kartensammlung gespeichert werden.
Konfigurieren Sie ListFileServlet in der Datei web.xml
<servlet><servlet-name>ListFileServlet</servlet-name><servlet-class>me.gacl.web.controller.ListFileServlet</servlet-class></servlet><servlet-mapping><servlet-name>ListFileServlet</servlet-name><url-pattern>/servlet/ListFileServlet</url-pattern></servlet-mapping>
Die Seite "ListFile.jsp" mit der angezeigten Datei lautet wie folgt:
<%@ page Language = "java" import = "java.util. Seite </title> </head> <body> <!-Überqueren Sie die Kartensammlung-> <c: foreach var = "me" items = "$ {filenamemap}"> <c: url value = "/servlet/downloadServlet" var = "Downurl"> <c: param name = "fileName" " value = "$ {me.key}"> </c: param> </c: url> $ {me.value} <a href = "$ {downurl}"> download </a> <br/> </c: foreach> </body> </html>Datei herunterladen
Paket me.gacl.web.controller; import Java.io.file; import Java.io.fileinputStream; Import Java.io.ioxception; import Java.io.outputStream; importieren java.net.urlencoder; import.htttplet.htttplet.httplet.httplet.htttplet.httplet.httplet.httplet.httplet.httplet.httplet.httplet.httplet.httplet.httplet. javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class DownloadServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//Get the file name to be downloaded String fileName = Request.GetParameter ("Dateiname"); //23239283-92489-avatar.avifileName = new String (Dateiname.getBytes ("ISO8859-1"), "UTF-8"); // Die hochgeladenen Dateien werden im Unterverzeichnis des/web-inf/upload-Verzeichniss speichert, Streichstrail-Streich-Streicher-Dateien, der im Subdirektory des/web-inf/upload-Verzeichnisses gespeichert ist, werden im Subdirektory des/web-inf/upload-Verzeichnisses gespeichert fileaSaverootpath = this.getServletContext (). getRealPath ("/webinf/upload"); // Finden Sie das Verzeichnis, in dem sich die Datei mit dem Dateinamen String path = findFileSavePathByFileName befindet (Filename, FileSaverootpath); // Die Datei zum Herunterladen von Datei (Path. if (! file.exists ()) {request.setAttribute ("message", "Die Ressource, die Sie herunterladen möchten, wurde gelöscht !!"); Request.GetRequestDispatcher ("/message.jsp"). Forward (Request, Antwort); zurück; Browser zum Herunterladen der Dateiantwort. response.getOutputStream (); // Erstellen Sie den Buffer -Byte -Buffer [] = New Byte [1024]; int len = 0; // Schleife Lesen Sie den Inhalt des Eingabestreams in den Puffer ((len = in.read). in Datei heruntergeladen werden*/ public String findFilesavePathByFileName (String -Dateiname, String SaverootPath) {int HashCode = Dateiname.hashCode (); Int Dir1 = HashCode & 0xf; // 0--15int Dir2 = (HashCode & 0xf0) >> 4; // 0-15 STRING DIR = SAVEROOTPATH + "//" + DIR1 + "//" + DIR2; // Upload/2/3 Upload/3/5File Datei = new Datei (DIR); if (! file.exists ()) {// Verzeichnisdatei erstellen.Konfigurieren von DownloadServlet in der Datei web.xml
<servlet> <servlet-name> downloadServlet </servlet-name> <Servlet-Class> me.gacl.web.controller.DownloadServlet </Servlet-Class> </Servlet> <Servlet-Mapping> <Servlet-name> DownloadServlet </servlet-name> <Fret-mapplet>/servlet/downloads/downloadServlet
Das obige ist das relevante Wissen über das Hochladen und Herunterladen von Javaweb -Dateien, die Ihnen vom Editor vorgestellt wurden. Ich hoffe, es wird Ihnen hilfreich sein.