Dieser Artikel vergleicht zwei Beispiele für Datei -Upload -Beispiele, mit denen alle die Funktion "Java -Datei Upload" besser lernen können. Der spezifische Inhalt ist wie folgt
1. Java -Anhang Upload -Code Upload -Code
@Controllerpublic class UploadFile extends BaseJsonController{ /** * Attachment upload* * @param request * @param creativeFile * @param response * @return */ @RequestMapping(value = "/upload/uploadFile.json") public void uploadFile(HttpServletRequest request,HttpServletResponse response) { /** * 1. Um die Sicherheit des Servers zu gewährleisten, sollte die hochgeladene Datei in ein Verzeichnis platziert werden, auf das von der Außenwelt nicht direkt zugegriffen werden kann, z. B. im Web-Inf-Verzeichnis. * 2. Um das Überschreiben von Dateien zu verhindern, muss ein eindeutiger Dateiname zum Hochladen der Datei generiert werden. * 3. Um zu verhindern, dass zu viele Dateien unter einem Verzeichnis angezeigt werden, müssen Sie den Hash -Algorithmus verwenden, um den Speicher aufzubrechen. * 4. Der Maximalwert von hochgeladenen Dateien sollte begrenzt sein. * 5. Um den Typ der hochgeladenen Dateien einzuschränken, wenn der Name des hochgeladenen Dateinamens empfangen wird, bestimmen Sie, ob der Suffix -Name legal ist. *// Erhalten Sie das hochgeladene Datei-Speichern-Verzeichnis, speichern Sie die hochgeladene Datei im Web-inf-Verzeichnis und erlaubt keinen direkten Zugriff von außen, um die Sicherheit von hochgeladenen Dateien String Savepath = Anregung.GetSession () zu gewährleisten. // Das temporäre Dateisparenverzeichnis, das während des Upload-String-Zeichens temppath = request.getSession () generiert wurde. Datei tmpfile = new Datei (temppath); if (! } // Die Nachricht fordert JsonArray arr = new JsonArray () auf; Karte <String, Objekt> map = null; InputStream in = null; FileOutputStream out = null; Versuchen Sie {// verwenden Sie die Apache -Datei -Upload -Komponente, um die Datei -Upload -Schritte zu verarbeiten: // 1. Erstellen Sie eine diskFileItemFactory Factory diskFileItemFactory factory = new diskFileItemfactory (); // Setzen Sie die Größe des Puffers der Fabrik. Wenn die hochgeladene Dateigröße die Größe des Puffers überschreitet, wird eine temporäre Datei im angegebenen temporären Verzeichnis generiert und gespeichert. factory.setSizethreshold (1024*100); // Setzen Sie die Puffergröße auf 100 KB. Wenn nicht angegeben, beträgt die Puffergröße standardmäßig 10 KB. // Setzen Sie das Speicherverzeichnis der temporären Datei, die während des Hochladens fabrisch generiert wurde. // 2. Erstellen Sie eine Datei hochladen parser servletFileUpload upload = new servletFileUpload (factory); // Supert Die Datei -Upload -Fortschritt hochladen. // Lösen Sie die chinesischen verstümmelten Upload.SetheaDerencoding ("UTF-8"); // 3. Stellen Sie fest, ob die eingereichten Daten die Daten des Upload -Formulars sind, wenn (! ServLetFileUpload.ismultipartContent (Anfrage)) {// Datenrückgabe nach traditioneller Art und Weise erhalten; } // Setzen Sie die maximale Größe der hochgeladenen Einzeldatei, die derzeit auf 1024*1024 Bytes festgelegt ist, dh 20 MB Upload.SetFileMax (1024*1024*20); // Legen Sie den Maximalwert der Gesamtzahl der hochgeladenen Dateien fest. Der Maximalwert = die Summe der maximalen Größen mehrerer Dateien, die gleichzeitig hochgeladen wurden. Es ist derzeit auf 40 MB Upload eingestellt. SetSizemax (1024*1024*40); // 4. Verwenden Sie den ServletFileUpload -Parser, um die hochgeladenen Daten zu analysieren. Das Analyseergebnis gibt eine Liste <DileItem> Sammlung zurück. Jedes FileItem entspricht dem Eingabeelement eines Formularsformulars @SuppressWarnings ("Deaktiviert") List <FileItem> list = Upload.ParSequest (Anfrage); für (FileItem -Element: Liste) {// Wenn die Daten der gewöhnlichen Eingabemelemente im FileItem if (item.isformfield ()) {String name = item.getFieldName () verkapselt sind; // Lösen Sie das chinesische verstümmelte Problem der Daten der gewöhnlichen Eingabeelemente String value = item.getString ("utf-8"); // value = new String (value.getBytes ("ISO8859-1"), "UTF-8"); System.out.println (Name + "=" + Wert); } else {// Wenn das Dateielement in der hochgeladenen Datei eingekapselt ist // den Namen der hochgeladenen Datei abrufen, String Dateiname = item.getName (); if (Dateiname == null || fileName.trim (). Equals ("")) {Fortsetzung; } // HINWEIS: Die von verschiedenen Browsern eingereichten Dateinamen sind unterschiedlich. Einige Browser senden Dateinamen mit Pfaden, wie z. B. C: /a/b/1.txt, während einige nur einfache Dateinamen sind, z. B. 1.txt // Der Pfadteil des Dateinamens der erhaltenen hochgeladenen Datei verarbeiten, nur der Dateiname -Teil ist beibehalten FileName = Dateiname.substring (Dateinenname). // Erhalten Sie die Erweiterung der hochgeladenen Datei String FileExteName = Dateiname.substring (Dateiname.lastIndexof (".")+1); // Wenn Sie den hochgeladenen Dateityp einschränken müssen, können Sie die Dateierweiterung verwenden, um festzustellen, ob der hochgeladene Dateityp legal ist, wenn (Stringutils.equals (FileExteName, "RAR") || StringUtils.equals (FileExteName, "ZIP")) {neue bizexception (",", "adoptimieren Sie komprimierte Dateien, die komprimierte Dateien hochladen, wird versterbig!"). } /*************** // den Eingabestream der hochgeladenen Datei im item = item.getInputStream () abrufen; /*************** // Die Datei speichern Verzeichnis String realSavePath = makePath (SaveFileName, SavePath); // Erstellen Sie einen Dateiausgabe -Stream out = new FileOutputStream (RealSavePath + "//" + SaveFileName); // Erstellen Sie einen Puffer -Byte -Puffer [] = neues Byte [1024]; // Die Identifizierung, ob die Daten im Eingabestream gelesen wurden, ist int len = 0; // Die Schleife liest den Eingabestream in den Puffer (len = in.read (puffer))> 0 bedeutet, dass es in while noch Daten gibt ((len = in.read (puffer))> 0) {// Verwenden Sie FileOutputStream -Ausgabestream, um die Pufferdaten in das angegebene Verzeichnis (Savepath + "// // // Filename) auszuschreiben. } // den Eingabestream in.close () schließen; // den Ausgabestream ausschließen.CLOSE (); // Die temporäre Datei löschen, die beim Bearbeiten von Datei -Upeladelement generiert wird. Delete (); map = new HashMap <String, Object> (); map.put ("SaveFileName", SaveFileName); map.put ("RealSavepath", RealSavePath); arr.add (map); } } returnSuccessJSON("UploadBase.FileSizeLimitExceededException e) { e.printStackTrace(); returnFailJSON(e.getMessage(), "Single file exceeds the maximum value!!!", response); }catch (FileUploadBase.SizeLimitExceededException e) { e.printStackTrace(); returnFailjson (E.getMessage), "Die Gesamtgröße der hochgeladenen Datei überschreitet die maximale Limit!", Antwort); in.close (); @return uUid + "_" + Der ursprüngliche Name der Datei */private String makefileName (String -Dateiname) {//2.jpg // Um das Überschreiben von Dateien zu verhindern, muss ein eindeutiger Dateiname generiert werden, um die Datei zurückzuladen. } / ** * Um zu viele Dateien in einem Verzeichnis zu verhindern, müssen Sie den Hash -Algorithmus verwenden, um den Speicher aufzubrechen // Erhalten Sie den HashCode -Wert des Dateinamens, und Sie erhalten die Adresse des String -Objekt -Dateinamens im Speicher int HashCode = Dateiname.hashCode (); Int Dir1 = HashCode & 0xf; // 0--15 int dir2 = (HashCode & 0xf0) >> 4; // 0-15 // Konstruieren Sie ein neues Speicherverzeichnis String. // Upload/2/3 Upload/3/5 // Datei können sowohl Dateien als auch Verzeichnisdatei für Datei = Neue Datei (DIR) darstellen; // Wenn das Verzeichnis nicht existiert, wenn (! File.exists ()) {// die Verzeichnisdatei erstellen.mkdirs (); } return dir; }}2. Java -Upload -Lebenslauf -Code
/ ***REDLADE-Lebenslauf*1-file Erstellung fehlgeschlagen 2-Ausnahme. / ** * Datei hochladen * * @param filoo * @param oldcontracturl * @param request * @return return Dateiadresse (relative Adresse, nicht absolute Adresse) */ @Override public String Upload (MultiPartFile-Datei, String OldContracturl, httpServletRequest) {String-uploadurl = String uploadurl = Request.GetSession (). getServletContext (). getRealPath ("Dateien"); // Dateien und Ordner löschen if (OldContracturl! Datei Datei = neue Datei (Uploadurl + OldDirectory); boolesche Flagge = Deletedir (Datei); if (! Flag) {logger.Error ("alte Dateilöschung fehlgeschlagen"); zurück "5"; }} // Neue Lebenslaufdatei nun hochladen = system.currentTimemillis (); Uploadurl = Uploadurl + Datei_separator + jetzt + File_Separator; String resumeName = ""; if (! fileio.isempty ()) {resumeName = stringutils.deletewhitespace (fileio.getoriginalFileName ()); // Richterdatei -Suffix/*String -Suffix = ResumeName.substring (ResumeName.LastIndexof ("."), ResumeName.length ()) .tolowerCase (); if (! ". doc" .equals (suffix) &&! ". docx" .equals (Suffix) &&! ". xlsx" .equals (Suffix) &&! Logger.Error ("Nicht Wort, Excel, PPT, PDF -Dateien"); zurück "6"; }*/} else {logger.Error ("Datei nicht erhalten"); zurück "4"; } Datei Dir = neue Datei (Uploadurl); if (! Dir.Exists ()) {dir.mkdirs (); } Datei targetFile = new Datei (Uploadurl + ResumeName); if (! targetFile.exists ()) {try {targetFile.createNewFile (); } catch (ioException e) {logger.Error ("Dateierstellung fehlgeschlagen", e); zurück "1"; }} try {fileio.transferto (targetFile); } catch (illegalStateException e) {logger.Error ("Satzausnahme", e); zurück "2"; } catch (ioException e) {logger.Error ("Upload fehlgeschlagen", e); zurück "3"; } return File_separator + "Dateien" + file_separator + nun + file_separator + resumeName; } /*** rekursiv alle Dateien im Verzeichnis und alle Dateien in den Subdirektorien* @param dir Das zu löschende Dateiverzeichnis* @return boolean zurückgibt "true", wenn alle Löschungen erfolgreich waren. * Wenn eine Löschung fehlschlägt, versucht die Methode nicht mehr zu löschen und gibt "false" zurück. */ public boolean deletedir (Datei dir) {if (dire.isdirectory ()) {String [] childhes = dir.list (); // Die Unterverzeichnisse im Verzeichnis für (int i = 0; i <children.Length; i ++) {boolean success = deletedir (neue Datei (Dir, Kinder [i]) rekursiv löschen; if (! success) {return false; }}} // Das Verzeichnis ist zu diesem Zeitpunkt leer. Sie können return dir.delete () löschen; }Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und die Fähigkeiten des Hochladens von Java -Dateien beherrschen.