In Javaweb ist das Hochladen und Herunterladen eine gemeinsame Funktion. Für das Datei -Upload gibt der Browser die Datei beim Hochladen der Datei in einem Streaming -Prozess an den Server weiter. Im Allgemeinen wird das Commons-fileUpload-Paket verwendet, um die Upload-Funktion zu implementieren. Da Commons-fileUpload von dem Commons-io-Paket abhängt, müssen Sie diese beiden Pakete Commons-fileUpload-1.2.1.jar und Commons-i-1.3.2.jar herunterladen.
1. Erstellen Sie eine Umgebung
Erstellen Sie ein Webprojekt und importieren Sie das Paket in das Projekt LIB
2. Implementieren Sie das Datei -Upload
(Die erste Methode zum Hochladen)
Erstellen Sie eine neue Seite upload.jsp -Seite
<%@ page Language = "java" contentType = "text/html; charset = utf-8" pageCoding = "utf-8"%> <! docType html public "-// w3c // dtd html 4.01 transitional // en" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>upload file</title></head><body> <!--The <%=request.getContextPath()%> here represents Der absolute Pfad zum Projekt, was bedeutet, dass egal wo Sie das Projekt in Zukunft kopieren, den genauen Pfad finden wird-> <form action </form> </body> </html>
Erstellen Sie ein neues Servlet, das das Datei -Upload übernimmt
Paket com.load; import java.io.file; import java.io.ioxception; import java.util.list; import javax.servlet.servletContext; import javax.servlet.servletException; import Javax.Servlet.Annotation.webservel; javax.servlet.http.httpServletRequest; importieren javax.servlet.http.httpservletResponse; import org.apache.commons.FileUpload.FileItem; importieren org.apache.commons.fileupload.FileUploadexception; org.apache.commons.FileUpload.disk.diskFileItemfactory; import org.apache.commons.FileUpload.Servlet.ServletFileUpload; @WebServlet ("/UploadServlet") öffentliche Klasse UploadServlet erweitert Httpervlet {private state statische state statische state statische state statische stationale long serialveresuid = 1l; public uploadServlet () {super (); } /* In dem Datei -Pload -Paket werden die komplexen Formularelemente in der HTTP -Anforderung als FileItem -Objekt angesehen. * The FileItem object must be parsed by the parseRequest() method in the ServletFileUpload class* (that is, the wrapped HttpServletRequest object), that is, the specific text form and upload file are separated* */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Use ismultiPartContent () Methode: Analysieren Sie, ob Anfragen zu Dateien in der Anforderung vorhanden sind. if (ismultiPart) {// Erstellen Sie eine einsetzbare Festplattenknotenfabrik diskFileItemfactory factory = new diskFileItemFactory (); // Die Kontextinformationen des Anfrage ServletContext ServletContext = Request.GetServletContext () erhalten; // Cache-Verzeichnis, jede serverspezifische Verzeichnisdatei repository = (Datei) servletContext.getAttribute ("javax.servlet.context.tempdir"); // Setzen Sie die Cache -Verzeichnisfabrik des Servers. // Die Erstellung von ServletFileUpload -Objekt muss von FileItemfactory abhängen // Das Werksfabrik speichert das erhaltene Upload -FileItem -Objekt auf der Server -Festplatte, dh das DiskFileItem -Objekt. ServletFileUpload upload = new ServletFileUpload (fabrik); Versuchen Sie, das HttpServletRequest -Objekt nach dem Wickeln analysieren zu können, weshalb Textformulare getrennt und hochladen Dateien (HTTP -Anforderungen werden als httpServletRequest) Liste <FileItem> items = upload.parsequest (Request) abgeschlossen; für (FileItem item: items) {String fieldname = item.getFieldname (); String Dateiname = item.getName (); String contentType = item.getContentType (); boolean isinmemory = issinmemory (); Long SizeInBytes = item.getSize (); // eine Datei instanziieren // request.getrealPath (abhalten die reale Pfad) Datei = Neue Datei (Request.getrealPath ("/")+"/lädt"+Dateiname.substring (Dateiname.lastindexof ("//")+1, FileName.Length ()); item.write (Datei); }} catch (FileUploadexception e) {e.printstacktrace (); } catch (Ausnahme e) {e.printstacktrace (); }}} Protected void dopost (httpServletRequest -Anforderung, httpServletResponse -Antwort) löscht ServletException, IoException {doget (request, response); }}(Die zweite Upload -Methode)
Erstellen Sie eine neue JSP -Seite (wie oben wird nur der Pfad geändert)
<%@ page Language = "java" contentType = "text/html; charset = utf-8" pageCoding = "utf-8"%> <! docType html public "-// w3c // dtd html 4.01 transitional // en" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>upload file</title></head><body> <!--The <%=request.getContextPath()%> here represents Der absolute Pfad zum Projekt, was bedeutet, dass egal wo Sie das Projekt in Zukunft kopieren, den genauen Pfad finden wird-> <Formapion = "<%= Request.getContextPath ()%>/UploadServlet1" EngeTePe = "MultiPart/Form-Data" -Methode "post"> <span> select-Datei: </span> <input "uplaD =" Datei "Datei" Datei "Datei" Datei "Datei" Datei "Datei" Datei "Datei" Datei "Datei" Datei "Datei" Datei "Datei" Datei "Datei" Datei "Datei" Datei "Datei" Datei "Datei" Datei "Datei" Datei "Datei" Datei "Datei" Datei "Datei" Datei "Datei" Datei "Datei" Datei "Datei". </form> </body> </html>
Erstellen Sie Servlet, um den Upload zu verarbeiten
Paket com.load; import java.io.file; import java.io.fileoutputstream; import java.io.ioxception; import java.io.inputstream; import java.io.outputstream; import Javax.servlet.servletException; import Javax.servlet.annotation.Multipartation.Multipartation.Multipartation.Multipartation.Multipartation javax.servlet.annotation.webservlet; import javax.servlet.http.httpServlet; import javax.servlet.http.httpserSequest; import javax.servlet.http.httpsertresponse; Importierung; javax.servlet.http.part; @webservlet ("/uploadServlet1")@multiPartConfig (location = "") öffentliche Klasse UploadServlet1 erweitert HttpServlet {private statische endgültige lange Serialversionuid = 1L; public uploadServlet1 () {super (); } Protected void dodget (httpServletRequest-Anforderung, httpServletResponse-Antwort) löst ServletException aus, ioException {response.setContentType ("text/html; charset = utf-8"); request.setcharactercoding ("utf-8"); // Die Datei hochladen und den Dateipart Teil = request.getPart ("Datei1") lesen; // Definieren Sie eine Variable, um den Dateinamen String Dateiname = NULL zu empfangen; // Inhaltsdisposition: Es soll einen Standarddateinamen angeben, wenn der Benutzer den angeforderten Inhalt als Datei speichern möchte // Content-Disposition: Sagen Sie dem Browser an, die Datei zu öffnen, indem Sie für (String-Inhalt: part.getheader ("Inhaltsdisposition"). Split (") {System.out.println (Inhalt); // den Dateinamen abrufen if (content.trim (). StartsWith ("Dateiname") {// den Dateinamen fileName = content.substring (content.indexof ('=') + 1) .trim (). Dividing Line und andere Daten out Lesen Sie);(Die dritte Hochladenmethode)
Das JSPSMartUpload -Paket wird hier zum Hochladen und Herunterladen verwendet. Der Autor ist der Ansicht, dass diese Art von Upload und Download relativ einfach ist, aber es scheint, dass viele Menschen sie nicht verwenden und nicht verstehen.
Erstellen Sie die HTML -Seite
<! DocType html> <html> <head> <meta http-äquiv = "content-type" content = "text/html; charset = utf-8"> <title> Upload-Datei Upload-Datei Upload-Datei hochladen. engType = "MultiPart/Form-Data"> <table align = "center"> <tr> <td> <div align = "center"> 1. <Eingabe type = "file" name = "file1"> </div> </td> </tr> <tr> <td> <div align = "center"> 2. </td> </tr> <tr> <td> </td> central <tr> <td> <div align = "center"> 3. <Eingabe type = "file" name = "file3"> </div> </td> </tr> <tr> <td> <div = "center"> <Eingabe type = "name =" subay "value =" value ".
Erstellen Sie ein Servlet, um Upload -Dateien zu verarbeiten
Paket com.load; import java.io.ioxception; import Java.io.printwriter; import Javax.servlet.servletException; import javax.servlet.annotation javax.servlet.http.httpServletResponse; importieren javax.servlet.jsp.jspfactory; import Javax.servlet.jsp.pageContext; import Com.jspsmart.Upload.file; com.jspsmart.upload.smartuload; com.jspsmart.Upload.smartUploadexception; @WebServlet ("/douploadServlet") öffentliche Klasse DownloadServlet erweitert HttpServlet {private statische endgültige long serialversionuid = 1l; public downloadServlet () {super (); } Protected void dodget (httpServletRequest-Anforderung, httpServletResponse-Antwort) löst ServletException aus, ioException {response.setContentType ("text/html; charset = utf-8"); Printwriter out = response.getWriter (); // Erstellen Sie ein neues Smart -Upload -Objekt SmartUpload su = new SmartUpload (); / * * PageContext pageContext; HttpSessionssitzung; ServletContext -Anwendung; ServletConfig -Konfiguration; JspWriter raus; Objekt Seite = dies; HttpServletRequest -Anforderung, HttpServletResponse -Antwort, bei der Seitenobjekt, Anforderung und Antwort instanziiert wurden, während die anderen 5 Objekte, die nicht instanziiert sind, auf folgende Weise so instanziiert werden, dass pageContext = jspxfactory.getPageContext (diese Anfrage, Antwort, Null, True, 8192, True); *// Die Kontextumgebung über die JSP Factory Class PageContext PageContext = jspfactory.getDefaultFactory (). // laden initialisieren su.initialize (pageContext); // Datei hochladen try {su.Upload (); // Speichern Sie die Upload -Datei in das angegebene Verzeichnis int count = su.save ("/share"); out.println (count+"Datei hochladen erfolgreich! <br>"+su.toString ()); } catch (smartUploadexception e) {e.printstacktrace (); } // Upload -Dateiinformationen extrahieren nacheinander für (int i = 0; i <so.getFiles (). GetCount (); i ++) {file file = su.getFiles (). GetFile (i); // Wenn die Datei nicht vorhanden ist, wenn (file.ismissing ()) fortgesetzt wird; // Aktuelle Dateiinformationen ausstellen.println ("<Table Border = 1>"); out.println ("<tr> <td> Formelementname (Feldname) </td> </td>"+file.getfieldname ()+"</td> </tr>"); out.println ("<tr> <td> Dateilänge </td> <td>"+file.getSize ()+"</td> </tr>"); out.println ("<tr> <td> Dateiname </td> <td>"+file.getFileName ()+"</td> </tr>"); out.println ("<tr> <td> Dateiname </td> <td>"+file.getFileName ()+"</td> </tr>"); out.println ("<tr> <td> Dateierweiterung </td> <td>"+file.getFileext ()+"</td> </tr>"); out.println ("<tr> <td> Datei Full Name </td> <td>"+file.getFilepathname ()+"</td> </tr>"); out.println ("</table> <br>"); }} / ** * @see httpServlet#Dopost (httpServletRequest-Anforderung, httpServletResponse-Antwort) * / Protected void dopost (httpServletRequest-Anforderung, httpServletRectRect) löscht ServletException, IOException {// //, um auto-gern-method-stupes ({// toDo auto-auto-gern-method sturced, storna, adace) zu ({// toDo auto-auto-gern-method stub doget, adona {// toDo auto-auto-acherated-method stub doget, {// toDo auto auto-acherated-method stub }} HINWEIS: Der Code int count = su.save ("/share"); bedeutet, dass Sie zuerst einen Ordner erstellen müssen, damit Sie zuerst eine in Webcontent erstellen können, dann das Projekt ablegen und dann in der Run -Seite ein Ordner neu anwenden können!
Oder Sie finden den Pfad direkt zum Ausführen und Erstellen des Share -Ordners.
3.. Datei -Download realisieren
(Erste Datei herunterladen)
Hinweis: Dieser Code greift direkt auf die Servlet -Klasse zu
Paket com.load; import java.io.fileinputstream; import java.io.ioxception; import java.io.inputstream; import Java.io.outputStream import javax.servlet.servletException; import Javax.Servlet.Antplet; javax.servlet.http.httpServletRequest; importieren javax.servlet.http.httpservletResponse; // Verwenden Sie direkt http: // localhost: 8080/test1/download, um herunterzuladen, aber dies ist fehlerhaft. Wenn der Name Download -Dateinamen Chinesen enthält, wird es verstümmelt! @WebServlet ("/download") öffentliche Klasse Download erweitert httpServlet {private statische endgültige long serialversionuid = 1l; public download () {super (); } Protected void dodget (httpServletRequest-Anforderung, httpServletResponse-Antwort) löst ServletException aus, ioException {response.setContentType ("text/plain; charset = utf-8"); response.setcharactercoding ("utf-8"); response.setheader ("Ort", "chinesisch.txt"); response.setheader ("Inhaltsdisposition", "Anhang; Dateiname =" + "Account.txt"); OutputStream outputStream = response.getOutputStream (); InputStream inputStream = new FileInputStream ("e:/laden"+"/conto.txt"); byte [] buffer = neues byte [1024]; int i = -1; while ((i = inputStream.read (puffer))! = -1) {outputStream.write (puffer, 0, i); } outputStream.flush (); outputStream.close (); } Protected void dopost (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {dodget (request, response); }}(Die zweite Download -Methode)
Erstellen Sie eine neue JSP -Seite und wählen Sie Download aus
<%@ page Language = "java" contentType = "text/html; charset = utf-8" pageCoding = "utf-8"%> <! docType html public "-// w3c // dtd html 4.01 transitional // en" "http://www.w3.org/tr/html4/loose.dtd"><html><Head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 " href = "../ Dodownloadservlet? Dateiname = hehe.txt"> Klicken Sie zum Herunterladen </a> </body> </html>
Erstellen Sie eine Servlet -Klasse zum Download (Hinweis: Wenn der Dateinamen dieses Downloads chinesisch ist, verursacht er weiterhin einen verstümmelten Code).
Paket com.load; import Java.io.BufferedInputStream; Import java.io.file; import Java.io.fileinputstream; Import Java.io.ioException; Import Java.io.inputStream; importieren Java.io.outputStream; Import. javax.servlet.annotation.webservlet; import javax.servlet.http.httpServlet; import Javax.servlet.http.httpServletRequest; import Javax.servlet.http.httpServletRect. javax.servlet.jsp.pageContext; import org.hsqldb.lib.stringutil; import com.jspsmart.upload.smartUpload; statische endgültige lange Serialversionuid = 1L; public dodownloadServlet () {super (); } Protected void dodget (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, IOException {// den Namen der heruntergeladenen Datei abrufen // String FileName = Request.GetParameter ("Dateiname"); // String Dateiname = new String (Dateiname.getBytes ("ISO8859-1"), "UTF-8"); // Erstellen Sie ein neues SmartUpload -Objekt SmartUpload su = new SmartUpload (); PageContext pageContext = jspfactory.getDefaultFactory (). GetPageContext (diese Anfrage, Antwort, NULL, TRUE, 8192, TRUE); // Initialisierung su.initialize (pageContext) hochladen; // Setzen Sie das Öffnen der Datei Su.setContentDisposition (NULL); // Datei herunterladen {su.downloadFile ("/listener/"+Dateiname); } catch (SmartUploadexception e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); }} Protected void dopost (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, ioException {dagget (request, response); }}(Die dritte Herunterladenmethode)
Der gleiche JSP -Seitencode wie oben wird hier nicht wiederholt.
Erstellen Sie eine neue Serlvet -Klasse, um die Download -Funktion zu implementieren (Hinweis: Auch wenn der Dateiname ein chinesischer Name ist, gibt es keine verstümmelten Probleme!)
Paket com.load; import Java.io.BufferedInputStream; Import java.io.file; import Java.io.fileinputstream; Import Java.io.ioException; Import Java.io.inputStream; importieren Java.io.outputStream; Import. javax.servlet.annotation.webservlet; import javax.servlet.http.httpServlet; import Javax.servlet.http.httpServletRequest; import Javax.servlet.http.httpServletRect. javax.servlet.jsp.pageContext; import org.hsqldb.lib.stringutil; import com.jspsmart.upload.smartUpload; statische endgültige lange Serialversionuid = 1L; public dodownloadServlet () {super (); } Protected void dodget (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, iOException {// Dateiname String path1 = request.getParameter ("Dateiname"); // Pfadname String path = request.getSession (). GetServletContext (). GetRealPath ("/listener/"+path1); // Pfad ist eine auf dem Log Path and Dateinamen gespleißte Datei. String Dateiname = Datei.getName (); Versuchen Sie {// Beurteilen Sie, ob es sich um IE11 boolean flag = request.getheader ("user-Agent"). Indexof ("Like Gecko")> 0; // IE11 User-Agent String: Mozilla/5.0 (Windows NT 6.1; WoW64; Trident/7.0; (request.getheader ("user-Agent"). TolowerCase (). Indexof ("msie")> 0 || Flag) {Dateiname = urlencoder.encode (Dateiname, "utf-8"); // dh Browser} else {// Die Räume in der Dateiname entfernen, um zu garmitiert, und das Erschließung. // Dieser Dateiname wird für den Dateinamen verwendet, der automatisch im Download-Box des Browsers angezeigt wird. // Firefox Browser // Firefox Browser User-Agent String: //mozilla/5.0 (Windows NT 6.1; WoW64; RV: 36.0) Gecko/20100101 Firefox/36.0} InputStream FIS = new BufferputStream (New Filefox/36.0}); Byte [] Puffer; buffer = new byte [fis.available ()]; fis.read (puffer); fis.close (); response.reset (); response.addHeader ("Inhaltsdisposition", "Anhang; Dateiname =" +Dateiname); response.addHeader ("Inhaltslänge", "" + file.length ()); OutputStream os = response.getOutputStream (); response.setContentType ("Anwendung/Oktett-Stream"); Os.write (puffer); // Ausgabedatei os.flush (); os.close (); } catch (ioException e) {e.printstacktrace (); } System.out.println (Dateiname); } Protected void dopost (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {dodget (request, response); }}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.