Das Upload von Java -Dateien und die Datei -Download sind relativ häufige Funktionen in der Programmentwicklung. Der folgende Artikel wird Ihnen drei Lösungen zum Implementieren von Datei -Upload und Download in Java vorstellen. Die spezifischen Details sind wie folgt;
Der erste Punkt: Java Code implementiert das Datei -Upload
FormFile File = Manform.getFile (); String newfileName = null;String newpathname=null;String fileAddre="/numUp";try {InputStream stream = file.getInputStream();// Read the file into String filePath = request.getRealPath(fileAddre);//Fetch the current path of the system File file1 = new File(filePath);//Add the function of automatically creating directories ((File) Datei1) .mkdir (); newFileName = system.currentTimemillis ()+ file.getFileName (). substring (file.getFileName (). newFileName); newPathName = filepath+"/"+newFileName; System.out.println (NewPathName); // Erstellen eines Ausgabestreams zum Hochladen von Dateien system.out.println (filepath+"/"+file.getFilename (); intesread = 0; while ((bytesread = stream.read (buffer, 0, 8192)! {e.printstacktrace ();}Der zweite Punkt: Implementieren Sie das Datei -Hochladen auf der JSP -Seite
Paket com.vogoal.util; import Java.io.BufferedOutputStream; Import Java.io.file; Import Java.io.FileOutputStream; Import Java.io.ioException; Import Java.Text.SimpledateFormat; Import Java. javax.servlet.servletInputStream; import javax.servlet.http.httpServletRequest; öffentliche Klasse jspFileUpload {/** Anforderungsobjekt*/private httpServletRequest -Anforderung = null;/** Pfad, um die Datei zu hochladen. 1024*8;/** Hashtable, der Parameter speichert*/private hashtable paramht = new Hasptable ();/** ArrayList, die den Dateinamen der hochgeladenen Datei speichert*/private ArrayList -Updafilearr = new ArrayList ();/*** Setzen Sie das Anforderungsobjekt. ** @param request* httpServletRequest Request Object*/public void setRequest (httpServletRequest Request) {this.Request = Request;}/*** Setzen Sie den Datei -Upload -Pfad. * * @param Pfad * Der vom Benutzer angegebene Upload -Pfad der Datei. */public void setUploadPath (String -Pfad) {this.UploadPath = Path;}/*** Das Hauptprogramm für die Datei -Upload -Verarbeitung. �������b * * @return Int Operation Ergebnis 0 Die Dateioperation war erfolgreich; 1 Anforderungsobjekt existiert nicht. 2 Der Dateispeicherpfad ist nicht festgelegt oder der Dateispeicherpfad ist falsch. 3* Der richtige EngType ist nicht festgelegt; 4 Die Dateioperation ist abnormal. */public int process () {int status = 0; // Bevor Sie die Datei hochladen, überprüfen Sie das Anforderungsobjekt, das hochladen Pfad und EncTePe hochladen. status = preCheck (); // gibt den Fehlercode zurück, wenn ein Fehler auftritt. if (status! Datei tmpfile = null; // Der Name der hochgeladenen Datei String fname = null; FileOutputStream baos = null; bufferedOutputStream bos = null; // ��hashtableParamHt = new Hashtable (); �Get ContentTypestring contentType = request.getContentType (); int index = contentType.indexof ("bloße ="); String boundary = "-" + contentType.substring (Index + 9); String endboundary = bloße + "-"; // � Das Stream vom Anforderungsobjekt aus dem Anforderungsobjekt. ServletInputStream SIS = Request.GetInputStream (); // 1 Zeile lesen while ((rtnpos = sis.readline (Buffs, 0, Buffs.Lengt))! name.trim (). length ()> 0) {if (Dateiflag) {bos.flush (); baos.close (); bos.close (); baos = null; bos = null; updFilearr.add (fname);} else {Object obj = paramht. (ArrayList) obj;} al.add (value); String (Buffs, 0, rtnpos); if (strbuff.tolowerCase (). StartsWith ("Inhaltsdisposition: Form-Data;")) {int nindex = strbuff.tolowerCase (). Indexof ("name =/"); int nlastindex = strbuff.tolower case (). (). (). strbuff.substring (nindex + 6, nLastIndex);} int findEx = strbuff.tolowerCase (). Indexof ("FileName =/"); if (findEx! flastIndex); fname = getFileName (fname); if (fname == null || fname.trim (). Länge () == 0) {FileFlag = false; SIS.Readline (Buffs, 0, Buffs.Length); SIS.Readline (Buffs, 0, Buffs.Length); SIS.Readline (Buffs, 0, Buffs); Contin; Buffs.length); SIS.Readline (Buffs, 0, Buffs.Length);}}} else if (strbuff.startswith (EndBoundary)) {if (name! null; updFilearr.add (fname);} else {Object obj = paramht.get (name); ArrayList al = new ArrayList (); if (obj! == null) {tmpfile = neue Datei (UploadPath + fname); baos = new FileOutputStream (tmpfile); bos = new bufferedOutputStream (baos);} bos.write (Buffs, 0, rtnpos); baos.flush (); + strbuff;}}}} catch (ioException e) {status = 4;} return status;} private int preCheck () {int errcode = 0; if (request == null) return 1; if (uploadPath == null || UploadPath.trim (). Länge () == 0) return 2; else {file tmpf = new Datei (UploadPath); if (! Name) {String value = ""; if (name == null || name.trim (). Länge () == 0) return value; value = (paramht.get (name) == null)? "" :( String) ((ArrayList) paramht.get (name). name.trim (). leng () == 0) return null; if (paramht.get (name) == null) null return null; arrayList al = (arrayList) paramht.get (name); String [] strarr = new String [al.size ()]; für (int i = 0; getupdFileSize () {return updFilearr.size ();} public String [] getupdFileNames () {String [] strarr = new String [updFilearr.size ()]; Für (int i = 0; i <updFilearr.Size (); i ++) strarr; getFileName (String input) {int findEx = input.lastIndexof ("//"); if (findEx == -1) {findEx = input.lastIndexof ("/"); if (findEx == -1) {return input;}} input = input.substring (findEx + 1); input.indexOf(".");Date dt = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");return input.substring(0,index) + sdf.format(dt) + input.substring(index);}}2. Verweisen Sie auf die Java -Klasse auf der JSP -Seite:
<%@page import = "com.vogoal.util.jspFileUpload"%> <%// JspFileUpload jfu = new jspFileUpload (); // Setzen Sie das Anforderungsobjekt JFU.SetRequest (Anfrage); // Die hochgeladene Datei Path Jfu.setuPloadpatath ("c: /////////// upload -verarbeitungsverarbeitung einstellen (" c: // "). Jfu.Process (); // Erhalten Sie die Werte anderer Eingabesteuerungsparameter in Form -String username = jfu.getParameter ("Benutzername"); // Wenn es mehrere Eingabesteuerelemente für denselben Parameter gibt, geben Sie den Array -String zurück [] usernamearr = jfu.getParameters ("username username"; jfu.getupdFileNames (); // Die Anzahl der hochgeladenen Dateien abrufen. Diese Methode ist ein bisschen nutzlos int FileNumber = jfu.getupdFileSize (); // Folgendes ist die Codeausgabe für den Test. // out.println ("Parameter:" + username); // out.println ("Parametergröße:" + usernamearr.Length); // out.println ("filearr Größe:" + filearr.Length); // if (filearr.Length> 0) // Out.println ("filearrn (" filearr ("filearr (" filearrn ("filearr (" filearrn ("filearr (" filearr.Der dritte Punkt: Struts2 implementiert Datei -Upload und Download
Schritt 1: Fügen Sie Commons-fileUpload-1.2.1.jar und Commons-i-1.3.2.jar unter Web-inf/lib. Diese beiden Dateien können von http://commons.apache.org/ heruntergeladen werden.
Schritt 2: Stellen Sie den EncTePe der Formentabelle auf: "Multipart/Form-Data", wie folgt:
Java -Code
öffentliche Klasse UploadAction {private Datei UploadImage; // Datei private Zeichenfolge UploadImageContentType; // Dateityp private Zeichenfolge UploadImageFileName; // Dateiname private String -Buchname; // Buchname private Zeichenfolge Autor; // Autor private StringspathE; // Datei speichern Speicherort // Attribute Getter/Setter -Methode öffentliche String -Upload () Ausnahmeberätigung {// implementieren upload code implementieren, i/O -Operation Return "upload"; }}Hinweis: Die Dateidomäne in einem Formular entspricht drei Eigenschaften in der Aktion, nämlich Dateinamen und Dateityp. Die Benennung ist festgelegt. Der Dateiname muss dem Dateidomänennamen im Formular (UploadImage) übereinstimmen. Der Dateiname lautet: Datei + Dateiname und Dateityp: Datei + contentType.
Schritt 4: Konfigurieren Sie unsere Upload -Aktion in Struts.xml.
Java -Code
<Action name = "Upload"> <param name = "speichernPath">/uploadFile </param> <Eltr EREWERN> /SUCCESS.JSP </result> </action>
HINWEIS: Um das Speicherverzeichnis der hochgeladenen Datei auf dem Server zu speichern, müssen Sie die SavePath -Variable in der UploadAktion definieren und die entsprechenden Setter- und Getter -Methoden hinzuzufügen, damit Struts2 den Wert von SavePath -Attribut für die SavePath -Attribut zuweisen kann, um die SavePath -Variable in der UploadAction zu verwenden.
Manuelle Konfigurationsdateifiltertyp
<param name = "duldtypes"> Bild/BMP, Bild/PNG, Bild/GIF, Bild/JPEG </param>
Manuelle Konfigurationsdateigrößenbegrenzung
<param name = "maximalSize"> 1048576 </param>
Verwenden Sie die Datei -Hochladen von Struts2, um die Dateifilterung zu implementieren
Struts2 bietet eine Datei -Upload -Interceptor - FileUpload. Durch die Konfiguration dieses Interceptors kann die Filterung hochgeladener Dateien leicht erreicht werden.
Bei der Konfiguration eines Datei -Pload -Interceptor können Sie zwei Parameter dafür angeben:
Zulässig: Gibt den Dateityp an, der hochgeladen und durch ein englisches Komma (,) getrennt werden darf.
Maximumsize: Gibt die Dateigröße an, die in Bytes hochgeladen werden darf.
TIPP: Durch Konfigurieren eines Datei -Pload -Interceptor können Sie die Dateifilterung problemlos implementieren. Wenn die Dateifilterung fehlschlägt, überträgt das System automatisch auf die logische Eingabeansicht. Daher muss die logische Ansicht benannte Eingabe für die Aktion konfiguriert werden. Darüber hinaus muss die Interceptor -Referenz von StandardStack für die Aktion konfiguriert werden.
Verwenden Sie den Interceptor von Struts2, um die Dateifilterkonfiguration wie folgt zu implementieren:
<action name = "uploadFileAction"> <interceptor-ref name = "DefaultStack"> <!-Konfigurieren Sie den Dateityp, der durch mehrere verwendet werden kann, indem Sie "-> <param name =" FileUpload.AllowedTypes "> Image/Bmp, Bild/png, Bild/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/page/jpeg, getrennt werden <!-- Configure the file size allowed to be uploaded, unit bytes, this example is: 1MB --> <param name="fileUpload.maximumSize">1048576</param> </interceptor-ref> <result name="input">/jsp/oneFileFileupload.jsp</result> <result name="success">/jsp/result.jsp</result> </action>
Wenn der Benutzer nicht hochladen kann, gibt es eine bestimmte Eingabeaufforderung. Verwenden Sie in Struts2 das <S: Fielderror/> Tag, um die Fehlermeldung auf die Seite auszugeben.
HINWEIS: Wenn Sie die Informationen zur Eingabeaufforderung von Struts2 verwenden möchten, muss die Aktionsklasse, die die Datei hochladen, die Aktionsversorgung erben, andernfalls gibt Struts2 die Funktion zur Eingabeaufforderung für die Ausgabefehler nicht an.
Wir können Ressourcendateien (.Properties) konfigurieren, um die Informationsausgabe für den Benutzer zu speichern.
struts.messages.eror.file.too.large: Wenn die Größe der Upload -Datei den festgelegten Wert überschreitet, gibt Struts2 die Eingabeaufforderungsinformationen aus, die dem Schlüssel entsprechen.
Struts.Messages.Error.content.type.not.allowed: Wenn der hochgeladene Dateityp nicht den festgelegten Wert erfüllt, gibt Struts2 die Eingabeaufforderungsinformationen aus, die dem Schlüssel entsprechen.
Struts.Messages.Error.Uploading: Wenn beim Hochladen einer Datei ein unbekannter Fehler auftritt, gibt Struts2 die Eingabeaufforderungsinformationen aus, die dem Schlüssel entsprechen.
Wir müssen die Ressourcendatei auch in der Datei stritzs.xml konfigurieren. Als nächstes müssen wir unsere Ressourcendatei anzeigen. Es enthält bereits Chinesen. Wir müssen es konvertieren und dann in das Projekt konfigurieren.
Legen Sie die Ressourcendatei in Struts.xml fest:
<konstant name = "struts.custom
Verwenden Sie den Befehl native2ascii d:/messages.properties d: /messages_zh_cn.properties, um die ursprüngliche Ressourcendatei in unterstützte umzuwandeln.
Hinweis: Halten Sie international, das Namensuffix der Ressourcendatei lautet: *_zh_cn + Dateierweiterung.
Das Prinzip des Hochladens mehrerer Dateien ist derselbe wie oben, aber es ist zu beachten, dass die Namensattributnamen mehrerer Dateifelder gleich sein müssen und in Aktion Datei [] oder List <Datei> verwendet werden sollte, um es zu empfangen.
Ich persönlich denke, dass die Verwendung dieser Methode zum Hochladen mehrerer Dateien nicht ist
sehr gut.
Struts2 für Datei -Download
Struts2 bietet einen Stream -Ergebnistyp, der speziell zum Download des Datei verwendet wird. Beim Angeben des Stream -Ergebnis -Typs muss ein Eingabenname -Parameter konfiguriert werden, der einen Eingabestream angibt, der der Eingang zur heruntergeladenen Datei ist (dh die Datei kann über diesen Eintrag in einem Stream heruntergeladen werden).
Implementieren Sie die Aktion des Datei -Downloads
Die öffentliche Klassenverfilme implementiert Aktion {// Dieser Eigenschaftswert wird in der Konfigurationsdatei angegeben. Struts2 injiziert automatisch (d. H. Einen Wert zugewiesen). Sie müssen den Setter- und Getter -Methoden privat String InputPath angeben; // Geben Sie den vollständigen Pfad der zu heruntergeladenen Datei an (Pfadname + Dateiname)/ * * Die Aktionsklasse, die den Download implementiert, sollte eine Methode zur Rückgabe einer InputStream -Instanz bereitstellen. Der entsprechende InputName -Eigenschaftswert in <result ... // public InputStream GeteTargetFile () löst Ausnahme aus {return ServletActionContext.getServletContext (). GetResourceAsStream (InputPath); } // Die ausführende Methode, mit der Benutzeranfragen übernommen werden und die den Erfolgszeichenfolge public String () die Ausnahme ausgelöst haben {return "Erfolg"; }}Die entsprechende Aktionskonfiguration in Struts.xml -Datei
<action name = "download"> <!-Geben Sie den Speicherort der heruntergeladenen Ressource an-> <param name = "inputPath">/uploadFile/Demo.txt </param> <!-Konfigurieren Sie den Ergebnistyp als Stream-> <Ergebnisname = "Erfolg" type "type"> <! Datei-> <param name = "inputName"> targetFile </param> <!-Geben Sie die Download-Methode der heruntergeladenen Datei und den zum Zeitpunkt des Downloads gespeicherten Dateinamens an. Der Dateiname beim Speichern von Datei muss eine Erweiterung haben, und die Erweiterung gibt das Symbol des Download-Typs an-> <param name = "contentDisposition"> Anhang; FileName = struts2.txt </param> <!-Geben Sie die Puffergröße der heruntergeladenen Datei an-> <param name = "puffersize"> 4096 </param> </result> </action> </action> </action> </action>
Die oben genannten sind die drei Lösungen für das Implementieren von Datei -Upload und Download in Java, die Ihnen vom Editor vorgestellt wurden. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!