Lassen Sie mich zunächst das Hochladen einer Datei vorstellen
Entitätsklasse
importieren java.sql.timestamp; / ** * * @Descripted Datei hochladen Entitätsklasse * */ öffentliche Klasse Upfile {private String -ID; // ID Primärschlüssel erzeugt zufällig private String uUidName; // UUID -Name private Zeichenfolge Dateiname; // Dateiname private Zeichenfolge SavePath; // Pfad private Zeitstempel -Upload -Zeit retten; // Zeit hochladen private Zeichenfolge Beschreibung; // Datei Beschreibung privater String -Benutzername; // Benutzername public upFile () {Super (); } public upFile (String -ID, String uUidName, String -Dateiname, String SavePath, Zeitstempel -UploadTime, String Beschreibung, String -Benutzername) {Super (); this.id = id; this.uuidname = uUidName; this.FileName = Dateiname; this.savepath = SavePath; this.UploadTime = UploadTime; this.description = Beschreibung; this.username = userername; } public String getDescription () {Rückgabe Beschreibung; } public String getFileName () {return Dateiname; } public String getId () {return id; } public String getavePath () {return SavePath; } public Timestamp getUploadTime () {return UploadTime; } public String getUnername () {return userername; } public String getuUidName () {return UUIDNAME; } public void setDescription (String Beschreibung) {this.description = Beschreibung; } public void setFileName (String Dateiname) {this.FileName = Dateiname; } public void setID (String -ID) {this.id = id; } public void setsavePath (String SavePath) {this.savePath = SavePath; } public void setUploadTime (Timestamp UploadTime) {this.UploadTime = UploadTime; } public void setUnername (String -Benutzername) {this.username = userername; } public void setUuidName (String uUidName) {this.uuidname = UUIDNAME; }}Seite
<%@ page Language = "java" import = "java.util. String basepath = request.getScheme ()+": //"+request.getSerVername ()+":"+request.getServerport ()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'upload.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-äquiv = "cache-control" content = "no-cache"> <meta http-äquiv = "expires" content = "0"> <meta http-äquiv type="text/css" href="styles.css"> --> </head> <body> <h1> File Upload</h1> <form action="${pageContext.request.contextPath }/upload" method="post" enctype="multipart/form-data"> <table> <tr> <td> Upload username:</td> <td> <Eingabe type = "text" name = "userername"/> </td> </tr> <tr> <td> Upload -Datei hochladen: </td> <td> <Eingabe type = "Datei" name = "Datei"/> </td> </tr> <TR> <TD> Beschreibung: </td> <td> <textare = name = "Beschreibung"> </textArea> </td> </tr> <tr> <td> <Eingabe type = "value =" upload start "/> </td> </tr> </table> </form> <div> $ {msg} </div> <a href =" {{{PageContext.Rextex. </body> </html> Servlet
importieren java.io.ioException; importieren javax.servlet.servletException; import Javax.servlet.http.httpServlet; importieren javax.servlet.http.httpServletRequest; importieren javax.servlet.http.httpServletResponse; import org.apache.commons.FileUpload.FileUploadbase.FilesimitexcePeedException; import org.apache.commons.FileUpload.FileUploadbase.sizelimitexceedEdException; import org.apache.commons.FileUpload.servlet.servletFileUpload; import com.itheima.domain.upfile; import com.itheima.exception.myException; import com.itheima.service.upFileService; import com.itheima.service.impl.upFileServiceImpl; import com.itheima.untils.webuntil; öffentliche Klasse UploadFileServlet erweitert HttpServlet (public void dodget (httpServletRequest -Anforderung, httpServletResponse -Antwort), die ServletException, IOException {Dopost (Anfrage, Antwort); } public void dopost (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {//, ob das Formular aus mehreren Teilen besteht, wenn (! servletFileUpload.ismultipartContent (Anfrage) {Anfrage. request.getRequestDispatcher ("/upload.jsp"). Weiterleiten (Anfrage, Antwort); zurückkehren ; } // Wenn es sich um einen Mehrfachteil, Get und Traverse handelt, um ein Datei-Upload-Objekt zurückzugeben, das alle hochgeladenen Informationen enthält, versuchen Sie es mit {UpFile upfile = webuntil.Upload (Request); UpFileService upFileService = new UpfileServiceImpl (); boolesche Flagge = upFileService.add (UpFile); if (flag) {request.setAttribute ("msg", "erfolgreich hochladen"); request.getRequestDispatcher ("/upload.jsp"). Weiterleiten (Anfrage, Antwort); zurückkehren ; } else {request.setAttribute ("msg", "Upload fehlgeschlagen, bitte versuchen Sie es erneut"); request.getRequestDispatcher ("/upload.jsp"). Weiterleiten (Anfrage, Antwort); zurückkehren ; }} catch (fileSizElimitexceedException e) {e.printstacktrace (); Request.SetAttribute ("msg", "Einzeldateigröße, die die maximale Grenze überschreitet"); request.getRequestDispatcher ("/upload.jsp"). Weiterleiten (Anfrage, Antwort); zurückkehren ; } catch (SizElimitexceedEDException e) {e.printstacktrace (); Request.SetAttribute ("msg", "Gesamtdateigröße, die die maximale Grenze überschreitet"); request.getRequestDispatcher ("/upload.jsp"). Weiterleiten (Anfrage, Antwort); zurückkehren ; }}}Werkzeuge
Import Java.io.file; importieren java.io.filenotfoundException; importieren java.io.fileoutputStream; importieren java.io.ioException; importieren java.io.inputstream; importieren java.io.outputstream; importieren java.io.usupportedenCodingException; Import Java.util.ArrayList; importieren java.util.list; import Java.util.uuid; importieren javax.servlet.http.httpServletRequest; import org.apache.commons.FileUpload.FileItem; import org.apache.commons.FileUpload.FileUploadBase; import org.apache.commons.FileUpload.FileUploadbase.FilesimitexcePeedException; import org.apache.commons.FileUpload.FileUploadexception; import org.apache.commons.FileUpload.ProgressListener; import org.apache.commons.FileUpload.disk.diskFileTemfactory; import org.apache.commons.FileUpload.servlet.servletFileUpload; import com.itheima.domain.upfile; import com.itheima.exception.myException; / ** * Datei -Upload -Toolklasse * @Describe TODO * */ public class webuntil {/ ** * Datei -Upload -Methode * @param Anforderung den Anforderungsparameter in * @return zurück ein UpFile -Objekt * @Throws FileSizExexceExceedException * @throws SizelimitexceedException * @WOWSEXSEXSEXCEDEDEDEXCTED * @Throws SizeLeTexceedException * @WOWOWOWSEx -Throws ioExceptionSexceedException * @throws SizeLexceedException * @@Othrows ioExceptionSexceedException * @throws SizeLexceedException. FileSizeLimitexceedEdException, SizElimitexSeedEDException {UpFile upFile = new upFile (); ArrayList <string> filelist = initList (); Versuchen Sie {// diskutdateifactory diskFileItemFactory factory = new diskFileItemfactory (); String tmp = request.getSession (). GetServletContext (). GetRealPath ("/tmp"); System.out.println (TMP); // Fabrik setFactory initialisieren (Fabrik, TMP); // Datei -Datei upload parser servletFileUpload upload = new servletFileUpload (factory); // Parser setUpload (Upload) initialisieren; // Dateiliste abrufen <DileItem> list = upload.parsequest (Anfrage); // Reise für (FileItem Elemente: List) {// Beurteilen Sie, ob es sich um ein ordentliches Formularobjekt if (isformfield ()) {// den Namen des Upload -Formulars -String -Feldname = items.getfieldname () erhalten; // Value String fieldValue = items.getString ("utf-8"); // Richter if ("username" .equals (fieldname)) {// upFile.setusername (fieldValue) einrichten; } else if ("Beschreibung" .equals (fieldName)) {// das Attribut oben file.setDescription (fieldValue) festlegen; }} else {// sind die Datei, die zum Hochladen von // das Dateiname String Dateiname = items.getName () abgerufen werden kann; // Die Unterschiede in den Dateinamen verwandeln, die aufgrund verschiedener Browser int index = Dateiname.lastIndexof ("//") erhalten wurden; if (index! } // zufällige Dateinamen für String uUidName = generateFileName (Dateiname); // Hochgeladene Dateipfadstring savePath = request.getSession (). GetServletContext (). GetRealPath ("/webinf/upload"); // Eingabestream im Anforderungsobjekteingabetream in = items.getInputStream () abrufen; // Brechen Sie die Datei und speichern Sie sie auf verschiedenen Pfaden, finden Sie den Pfad SavePath = generaterandomdir (SavePath, UuidName); // die Datei uploadfile kopieren (in, savePath, uUidName); String id = uUid.randomuuid (). ToString (); upFile.setId (id); upFile.setsavePath (SavePath); upFile.setuUidName (uUidName); UpFile.SetFileName (Dateiname); // Cache -Elemente löschen. Delete (); }}} catch (FileUploadbase } catch (FileUploadBase.sizelimitexceedEdException e) {// Ausnahme wirkt e; } catch (FileUploadexception e) {e.printstacktrace (); } catch (unportedenCodingException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); } catch (Ausnahme e) {e.printstacktrace (); } Rückkehr nach oben; } / *** Dateiliste initialisieren* @return* / private statische ArrayList <string> initlist () {ArrayList <string> list = new ArrayList <string> (); list.add (". JPG"); list.add (". rar"); list.add (". txt"); list.add (". png"); Rückgabeliste; } /*** Datei kopieren* Eingibt Stream in @Param in Elementen* @param SavePath Speicherpfad* @param uUidName Dateiname* /private static void uploadFile (inputStream in, String SavePath, String uUidName) {// Dateidatei abrufen = neue Datei (Savepath, uUidName); OutputStream out = null; Versuchen Sie {int len = 0; byte [] buf = neues byte [1024]; // den Ausgabestream out = new FileOutputStream (Datei) abrufen; while ((len = in.read (buf))! =-1) {out.write (buf, 0, len); }} catch (FilenotFoundException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); } endlich {try {in.close (); } catch (ioException e) {e.printstacktrace (); } try {out.close (); } catch (ioException e) {e.printstacktrace (); }}} /*** zufälligen Speicherpfad erzeugen* @param SavePath -Pfad* @param uUidName Der generierte UUID -Name* @return* Verwenden Sie HashCode, um zu vervollständigen* /private statische String -Generaterandomdir (String SavePath, String uUidname) {// converting to HashCode System.out.Println ("Uplowd -Path. System.out.println ("uUidName"+uUidName); int HashCode = uUidName.hashCode (); // Container StringBuilder sb = new StringBuilder (); while (HashCode> 0) {// int 15 int tmp = HashCode & 0xf; sb.Append ("/"); sb.Append (tmp+""); HashCode = HashCode >> 4; } // Neuen Pfad String path = SavePath+sb.toString () teilen; System.out.println ("Pfad"+Pfad); Datei Datei = neue Datei (Pfad); // beurteilen, ob der Pfad existiert, wenn (! File.exists ()) {// Datei erstellen.mkdirs (); } // den Speicherspfad zurückgeben; } / *** generieren Sie einen neuen Dateinamen* @param uUidName zufälliger ID -Name* @param Dateiname Originalname* @return* / private statische String generateFileName (String -Dateiname) {String uUidname = UUID.RandomuUid (). TOSTRING (); return uUidname.replace ("-", "") .toString ()+"_"+Dateiname; } / *** Initialisierung parser* @param upload* / private static void setUpload (servletFileUpload upload) {// Zeichen codieren upload.setheAnenCoding ("utf-8"); // Dateigröße hochladen.SetFilesimemax (1024*1024*20); // Gesamtdateigröße hochladen.Setsizemax (1024*1024*50); // Fortschritts -Listener -Upload festlegen. *@param TMP -Pufferverzeichnis*/ private statische void setfactory (diskFileInfactory Factory, String TMP) {/// die Initialisierungs -Pufferfabrik. Laden Sie zwei Dateien herunter
Servlet
öffentliche Klasse DownupFileServlet erweitert HttpServlet (public void dodget (httpServletRequest Request, httpServletResponse -Antwort). } public void dopost (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, iOException {// id String id = request.getParameter ("id"); // Die Schnittstelle der Business Layer UpFileService UpFileService = new UpFileServiceImpl (); // dieses Objekt basierend auf der ID nach oben file = upFileService.findupFileById (ID); if (upFile == null) {return; } // Erhalten Sie den richtigen Namen des Datei String Dateiname = upfile.getFileName (); // Wenn es Chinesen im Dateinamen gibt, muss es transkodiert werden. Andernfalls gibt es keinen Dateinamen fileName = urlencoder.encode (Dateiname, "UTF-8"); // Namenszeichenfolge uUidname = upFile.getuUidName (); // Pfad String SavePath = upFile.getSavePath (); Datei Datei = neue Datei (SAREPADE, UUIDNAME); // Bestimmen Sie, ob die Datei existiert, wenn (! File.exists ()) {request.setattribute ("msg", "die heruntergeladene Datei ist abgelaufen"); request.getRequestDispatcher ("//index"). Forward (Request, Antwort); zurückkehren; } // Setzen Sie die Datei-Download-Antwort-Header-Information Antwort. // IO -Stream verwenden, um InputStream in = new FileInputStream (Datei) auszugeben. ServLetOutputStream out = Antwort.getOutputStream (); int len = 0; byte [] buf = neues byte [1024]; while ((len = in.read (buf))! =-1) {out.write (buf, 0, len); } in.close (); }}Datenbank
Datenbank erstellen upload_download_exercise; Verwenden Sie Upload_download_exercise; Erstellen Sie die Tabellenaufträge (ID varchar (100), // Verwenden Sie UUID, um UUIDNAME VARCHAR (255) zu generieren, // UUID plus den Original -Dateinamen Dateiname Varchar (100), // realer Dateiname Savepath Varchar (255), // Path -Pfad -Upload -Time -Timestamp, // Zeitbeschreibung Varchar (255) (255), // USERName Varchar (10).
Das oben genannte ist der relevante Inhalt von Java, der Commos-fileUpload verwendet, um Datei-Upload und Download zu erreichen. Ich hoffe, es wird für alle hilfreich sein.