In der Entwicklung des Webanwendungssystems werden die Datei -Upload- und Download -Funktion der Datei heute sehr häufig verwendet.
Für das Datei -Upload unterliegt der Browser die Datei während des Hochladens des Browsers auf die Serverseite. Daher verwenden Sie die Apache von Apache von Apache. Das JAR-Paket der CommonEeupload-Upload-Komponente kann auf der offiziellen Website von Apache heruntergeladen werden. Common-FileUpload hängt vom Common-IO-Paket ab, daher müssen Sie dieses Paket herunterladen.
1. Konstruktion für Entwicklungsumgebung
Erstellen Sie ein FileUploadandDownload-Projekt, fügen Sie Apache Commons-fileUpload-Datei hinzu, um das zugehörige JAR-Paket der Komponente hochzuladen, wie in der folgenden Abbildung gezeigt:
2. Implementieren Sie das Datei -Upload
2.1, Datei -Upload -Seite und Meldungsaufforderung Seite
Der Code der Seite upload.jsp ist wie folgt:
<%@ Page Language = "Java" PageCoding = "UTF-8"%> <! }/Servlet/uploadHandleServlet "engType =" MultiPart/Form-Data "methode =" post "> Upload-Benutzer hochladen: <input type =" text "name =" userername "> <br/> Datei hochladen 1: <Eingabe type =" Datei "name =" file1 "> <br/> Datei hochladen 2: <Eingabe type =" Datei "name =" file2 "> <br/> <Eingabe type =" value = "value =" subieren "</ Form> </body> </html>
Message.jsps Code lautet wie folgt:
<%@ Page Language = "Java" PageCoding = "UTF-8"%> <!
2.2 Behandeln Sie den von der Datei hochgeladenen Dienst hoch
Der Code von UploadHandleServlet lautet wie folgt:
Paket me.gaCl.Web.Controller; ; TpServlet {Public oid dodget (httpServletRequest-Anforderung, httpServletResponse-Antwort) löst ServletException aus, IOException {// das Erhaltungsverzeichnis der hochgeladenen Datei nass und speichern die hochgeladenen Dateien im Web-INF Safe Savepath = this.getServletContext (). ) &&! "" "; try {// Verwenden Sie die Apache -Datei zum Hochladen von Komponenten -Verarbeitungsdateien hochladen Schritte: // 1. Erstellen Sie ein diskFileItemFactory Factory diskfileItemfactory = newFileItem faktor (); // 2. Erstellen Sie eine Datei hochladen Die Parser ServletfileUpload upload = new servletFileUpload ( Fabrik); V. item if (item.isformfield ()) {String name = item. // value = new String (value.getBytes ("ISO8859-1"), "UTF -8"); In der FileItem eingekapselt, der Name der hochgeladenen Datei, String Dateiname = item.getName (); Weiter;} // Hinweis: Die von verschiedenen Browsern übermittelten Dateinamen sind unterschiedlich, einige Browser senden die Dateinamen mit Pfaden, wie z. B.: C: /a/b/1.txt, und einige sind nur einfache Dateinamen wie z. B. : 1.txt // Verarbeitung Auf dem Pfad des Namens nur der Dateiname Part FileName = Dateiname.substring (Dateiname.lastIndexof ("//"); // Erhalten Sie den Eingabestream in der Upeladdatei in Element InputStream in = item.getInputStream ();//Erstellen Sie eine Dateiausgabe Stream -DateiOutputStream out = new FileOutputStream (speichernpath + "//" + Dateiname); Ob die Daten im Eingangsstrom das fertige Logo int len = 0 gelesen haben; in)> 0) {// Schreiben Sie die Daten des Puffers in das angegebene Verzeichnis (SavePath + "//" + Dateiname) mit dem Ausgabestream von FileOutputStream in.close (); Close (); ";}}} Catch (Ausnahme e) {message =" Datei -Upload fehlgeschlagen! "; E.printstacktrace ();} request.setAttribute (" meldung ", meldung); request.getRequestDispatcher (" /message.jsp ").;} Public void dopost (httpServletrequestanfrage, httpserdRespon (Anfrage, Antwort);}}
Registrieren Sie UploadhandleServlet in der Datei web.xml
<servlet> <servlet-name> uploadhandleServlet </servlet-name> <servlet-classe> me.gacl.web.controller.UploadleServlet </Servlet-Class> </Servlet> <serv> let-Mapping> <Servlet-name > UploadHandleServlet </Servlet-name> <URL-Muster>/Servlet/UploadhandleServlet </url-pattern> </servlet-mapping>
Der Laufeffekt ist wie folgt:
Nachdem die Datei erfolgreich hochgeladen wurde, wird die hochgeladene Datei im Upload-Verzeichnis im Web-INF-Verzeichnis gespeichert, wie in der folgenden Abbildung gezeigt:
2.3.
Obwohl der obige Code erfolgreich in das angegebene Verzeichnis auf dem Server hochgeladen werden kann, gibt es viele kleine Details, die auf die Funktion "Datei -Upload" beachtet werden müssen.
1. Um die Sicherheit des Servers zu gewährleisten, sollte die Upload-Datei in das Verzeichnis platziert werden, auf das die externe Welt nicht direkt zugreifen kann, z. B. im Web-inf-Verzeichnis.
2. Um die Dateiabdeckung zu verhindern, müssen ein eindeutiger Dateinamen zum Hochladen von Dateien generiert werden.
3. Um zu viele Dateien unter einem Verzeichnis zu verhindern, verwenden Sie den Hash -Algorithmus, um den Speicher zu zerstreuen.
4. Begrenzen Sie den Maximalwert von Upload -Dateien.
5. Es ist notwendig, die Art der Upload -Dateien zu begrenzen.
Als Reaktion auf die 5 Details der oben genannten Verbesserung des Upload -HandleServlets ist der verbesserte Code wie folgt:
Paket me.gaCl.Web.Controller; Javax.Servlet.ServletException; .APache.Commons.FileUpload.ProgressListener; @Author: Verfügbarkeit Wolf * @date: 2015-1-3 pm 23:35:50 * */ public class hochladen ex. Verzeichnis von Upload-Dateien wird im Web-Inf-Verzeichnis gespeichert. Upload speichert das Verzeichnis String testh = this.getServletContext (). Message forders Message = "" "" "; Der Puffer der Fabrik. Fabrik // 2. Erstellen Sie eine Datei zum Hochladen des Parser -Service -ServiceFileUpload upload = new ServiceFileUpload (Factory); {System.处理 : 7367 Die Größe der Datei lautet: 14608, die aktuelle Verarbeitung: 11419 Dateigröße ist: 14608, derzeit verarbeitet: 14608 */}}); -8 "); // 3.. Bestimmen Sie, ob die eingereichten Daten die Daten sind, wenn (! (1024*1024); 、使用 servletFileUpload 解析器解析上传数据 , 解析结果返回的是一个 解析结果返回的是一个 list <FileItem> 集合 , 每一个 FileItem 对应一个 Formular 表单的输入项 List <FileItem> list = upload.Parserequest (Anfrage); ) {// Wenn es im FileItem eingekapselt ist, sind die Daten der gewöhnlichen Eingabemelemente (itemFormfield ()) {String name = item.getfieldname (). String value = item.getString ("UTF-8"); + Wert)} else {//, wenn der Dateiname von der hochgeladenen Datei in der Datei hochgeladen wird. ") Oder Einfache Dateinamen wie: 1.txt // Verarbeitung des Dateinamens des Dateinamens der erhaltenen Datei, die erhalten wurden, behalten Von den hochgeladenen Datei -String -DateiexteName = Dateiname.substring (Dateiname.lastindexof ("..") +1); system.out.println ("Die Erweiterung der hochgeladenen Datei ist:"+FileExteName); Datei ist saveFileName = makefileName (Dateiname); Neues Byte [1024]; Gibt an, dass es eine Daten gibt, wobei ((len = in.read (puffer)) >> 0) {// die Daten des Puffer in das angegebene Verzeichnis (SAVEPATH + "//" + Dateiname) mit dem FileOutputStream -Stream schreiben . ";}}} Catch (FileUploadBase.FilesizeLimitexcexception e) {e.printstacktrace (); Request.SetAtTribute (" Nachricht "," Eine einzelne Datei überschreitet den maximalen Wert !!! "); Anfrage.GetRequestDispatcher (" /message.jspa ") .Forward (Anfrage, Antwort); Rückgabe;} catch (FileUploadbase.sizelimitexceException E) {E.PrintStacktrace (); Age", "Die Gesamtgröße der Upload -Datei ist über die maximale Grenze hinaus!"; "/Message.jsp"). "; E.printstacktrace ();} request.setAttribute (" meldung ", meldung); request.getRequestDispatcher (" /message.jsp ").;} /** * @Method: MakefileName * @ @ @ @ @ @ @ @ crescriping: generieren Sie die Datei Name der Upload -Datei, der Dateiname lautet: uUid+"_"+Datei ursprünglicher Name* @anthor: Der ursprüngliche Name des einsamen Wolfs* @param Dateiname -Datei* @return uUid+"_"+Der ursprüngliche Name der Datei der Datei * /Private String MakefileName (String -Dateiname) {//2.jpg // Um eine Dateiabdeckung zu verhindern, muss ein eindeutiger Dateiname return uUid.randomuuid (). * Um zu viele Dateien unter einem Verzeichnis zu verhindern, verwenden Sie den Hash -Algorithmus, um den Speicher zu zerstreuen * @Param SavePath -Dateispeicherpfad* @return New Storage Directory*/private String makePath (String -Dateiname, String SavePath) {// Der Wert des HashCode des Dateinamens ist das Filenam e -String -Objekt in dieser Adresse der Adresse des Speichers Int HashCode = Dateiname.hashCode (); "//" + dir2; Datei.EXIST ()) {// Erstellen Sie die Verzeichnisdatei.mkdirs ();} return Dir;} public void dopost (httpServletRequest, httpServletResponse -Antwort) ServletException, IOException {DoGet (Anfrage, Antwort);
Nachdem die oben genannten 5 kleinen Details verbessert wurden, ist unsere Funktion "Datei -Upload" vollständiger.
Drei, Datei -Download
3.1.
Wir müssen die Dateiressourcen im Webanwendungssystem zum Herunterladen zur Verfügung stellen. Der Download -Vorgang wird durchgeführt.
Der Code von ListFileServlet lautet wie folgt:
Paket me.gaCl.Web.Controller; ; -4 9:54:40 **/ public class listFileServlet erweitert HttpServlet (public void dodget (httpServletRequest Request, httpServletResponse) ows servleTexception, ioException {// das Verzeichnis von Upload -Datei String UploadFilepath = this.getServlet (). /Web-inf/upload "); // Speichern Sie die Dateiname Karte <String, String> filenamemap = new Hashmap <String, String> (); Dateien und Verzeichnisse, Speichern Sie den Dateinamen der Datei in der Listfile (neue Datei (neue Datei (Neue FilePilepath), Filenamemap); /ListFile.jsp "). Weiterleiten (Anfrage, Antwort);}/*** @Method: ListFile* @Descripting: rekursive Durchführung im angegebenen Verzeichnis alle Dateien* @Anthor: Die verfügbare Wolf* @param -Datei bedeutet eine Datei, eine Datei, Außerdem repräsentiert es ein Dateiverzeichnis* @Param Map Storage Dateiname Kartensammlung*/ public void listfile (Dateidatei, Karte <Zeichenfolge, Zeichenfolge> Karte) {// Wenn die Datei nicht eine Datei, sondern ein Verzeichnis if (! Datei Datei darstellt (! Datei .isfile ()) {// Auflisten Sie alle Dateien und Verzeichnisse in den Verzeichnisdateien [] = file.listfiles (); Karte);}} else {/*** Verarbeitungsdateiname, die hochgeladene Datei wird in der Form von UUID_ Dateinamen umbenannt, um im uuid_ -Teil der Dateinamendatei.getName () umzubenennen Zuerst wurde in der Zeichenfolge "_" in der Zeichenfolge angezeigt. ") +1 kann einen _ fan _ 达 .avi Teil*/string realname = file.getName () .substring (file.getName (). Indexof (" _ ")+1); // File.getName () erhalten Ruft den ursprünglichen Namen der Datei ab. );}}
Hier ist ein kurzes Gespräch über die ListFile -Methode in ListfileServlet. Verzeichnis der Datei über das Abfrageformular. und gespeichert, so dass es für die Rekursion verwendet werden muss.
Konfigurieren Sie ListFileServlet in der Datei web.xml
<servlet> <servlet-name> listFileServlet </servlet-name> <servlet-classe> me.gac l.web.controller.listFileServlet </servlet-classe> </servlet-mapping> <servlet-name> listFileServlet </ Servlet-name> <URL-Muster>/Servlet/ListFileServlet </url-pattern> </Servlet-Mapping>
Die Seite ListFile.jsp der Download -Datei lautet wie folgt: wie folgt:
<%@ page Language = "java" image = "java.util. /jstl/core " %> <! docType html> <html> <kopf> <titels> Seite" Dateianzeige herunterladen "</title> </head> <body> <!-Traversing Map Collection-> <C: Foreach var = "Me" items = "$ {filenamemap}"> <c: url value = "/server/doubledServlet" var = "double"> <c: param name = "fileName =" $ {me.key} "> </ C: Param> </c: url> $ {me.value} <a href = "$ {doublel}"> download </a> <br/> </c: foreach> </body> </html>
Besuchen Sie ListFileServlet, Sie können die dem Benutzer zur Verfügung gestellten Dateiressourcen auf der Seite "ListFile.jsp" angezeigt, wie in der Abbildung unten gezeigt ::
3.2
Schreiben Sie ein Servlet für die Verarbeitung von Dateien.
Paket me.gaCl.Web.Controller; ; GetParameter ("Dateiname"); Im Verzeichnis/Web-inf/Upload. Wenn die Datei nicht vorhanden ist, wenn (! Xists ()) {Request.SetatTribute ("Nachricht", "Die Ressourcen, die Sie herunterladen möchten, wurden gelöscht!"); Anfrage, Antwort); codieren (RealName, "UTF-8"); .GetputStream (); (Puffer))> 0) {// Der Inhalt des Ausgabepuffers zum Browser implementieren Sie die Datei herunterladen.write (Puffer, 0, Len);} // den Dateieingangsfluss in.close (); / Ausgabestream ausschließen.CLOSE ();}/ *** @METHOD: FindFilesavePathByFileName* @Description: Suchen Sie den Pfad der Datei zur Datei, die über den Dateinamen und Speicher des Dateiroot -Verzeichnisses* @anthor heruntergeladen werden soll: e Der heruntergeladene Dateiname* @Param SaverootPath Upload Das von der Datei gespeicherte Root-Verzeichnis, dh das Speicherverzeichnis der Dateien, die von/Web-inf/Upload-Verzeichnis* @return auf die heruntergeladene Download-Datei heruntergeladen werden sollen*/heruntergeladen werden sollen*/ Public String findFileSaveppilename (String-Dateiname, S tring SaverootPath) {int HashCode = Dateiname.HashCode (); Dir = SaveroolPath + "//" + DIR1 + "//" // "" + d Ir2; )) {// Erstellen Sie eine Verzeichnisdatei.mkdirs ();} return dir;} öffentliche void Uest -Anforderung, httpServlePonse -Antwort) löst ServletException, IOException {dotget (Anfrage, Antwort);}}} aus
Konfigurieren Sie DownloadServlet in der Datei web.xml
<servlet> <servlet-name> downloadServlet </servlet-name> <servlet-classe> me.g acl.web.controller.downloadServlet </Servlet-Class> </servlet> <Servlet-Map-Map-Ping> <servlet-name> downloadServlet </servlet-name> <URL-puftern>/servlet/downloadservlet </url-pattern> </servlet-mapping>
Klicken Sie auf [Download] Hyperlink und senden Sie die Anfrage zum DownloadServlet, um sie zu verarbeiten. Sie können den Datei -Download herunterladen.
Aus den Ergebnissen des Vorgangs können wir feststellen, dass unsere Datei -Download -Funktion die Datei bereits normal herunterladen kann.
Dieser Artikel wurde mit "Java -Upload -Betriebsfähigkeiten" zusammengestellt und alle zum Lernen und Lesen begrüßen.
Es gibt so viele Inhalte über das Hochladen und Herunterladen von Dateien in Javaweb.