Vorher geschrieben:
In den letzten Tagen habe ich das Upload von Webuploaderdateien untersucht. In den vorherigen Blogs zeichnet Beispiele für die Verwendung von WebuPlader zum einfachen Hochladen von Dateien auf. Heute werde ich auch die Beispiele für das Hochladen von Fragmenten und Haltepunkten aufzeichnen. Im Blog Park habe ich auch einige Informationen angesehen. Grundsätzlich ist die Backend -Verarbeitung von Daten Servlets oder SpringMVC. Da das jüngste Projekt schon immer Struts2 war, werden wir die Aktion in Struts2 verwenden, um die Daten zu verarbeiten, um den Effekt des Hochladens von Dateien in Teilen zu erreichen.
1.Was ist Shard -Upload?
Wie der Name schon sagt, bedeutet dies, die Datei in Stücke zu teilen, das heißt, eine Datei in mehrere kleine Dateien aufzuteilen und dann hochzuladen. Der Vorteil davon ist, dass es das Hochladen großer Dateien erleichtert.
2. Allgemeine Ideen für das Hochladen von Shards:
1. Wählen Sie auf der Seite der Rezeption die Datei aus und klicken Sie auf die Schaltfläche zum Hochladen.
2. WebuPlader teilt die hochgeladenen Dateien in bestimmte Zahlen und sendet sie nacheinander an den Server -Backend.
3. Der Server empfängt die geteilten kleinen Dateien und speichert sie in einem temporären Ordner.
4. Nachdem der Server die geteilte kleine Datei empfangen hat, führt die Vordergrundseite die erfolgreiche Funktion des Uploads aus.
5. Senden Sie in der erfolgreichen Aufladungsfunktion eine Anforderung an den Server und fordern Sie die Anforderung zur Zusammenführung der kleinen Dateien in eine ganze Datei.
6. Der Serverhintergrund verschiebt die Dateien und löscht die temporären Dateien, die kleine Dateien nach Abschluss der Zusammenführung speichern.
Nachdem Sie den allgemeinen Prozess des Shard -Hochladens verstanden haben, gehen Sie bitte zur Demo.
Seite an der Rezeption:
<%@ page contentType = "text/html; charSet = utf-8" Sprache = "java"%> <%String Scheme = Request.getScheme (); String sservername = request.getServername (); String contextPath = request.getContextPath (); int port = request.getServerport (); // Website -Zugangs- und Pfad -String -BasisaRl = Schema + ": //" + Servername + ":" + port + contextPath; Request.SetAttribute ("BaseURL", BaseURL);%> <html> <Head> <titels> Einfaches Beispiel für das Hochladen von Dateien mit fragmentiertem </title> <%-Einführung von CSS-Styles-%> <link href = "$ {Baseurl} /webuPoader0.1.1.5/Webuloler.css" relation0.1.1.5/webuloler.css " rel = "styleSheet" type = "text/css"/> <script src = "$ {Baseurl} /ligerui2/jquery/jquery-1.9.0.min.js" type = "text/javaScript"> </script> <%-Einführung von Datei-Plugin-%> <script = "text =" text = "text =" text "/javaScript". src = "$ {BaseUrl} /webuPloader0.1.5/webuPloader.min.js"> </script> <script type = "text/javaScript"> $ (Funktion (function () {/* Für die Erstellung von Uploader ist es am besten zu warten, bis das Dom -Element erstellt wird. Ort, der leicht zu ignorieren ist. 'Datei'] legt den Namen der Datei -Upload -Domäne ein. Dies ist der Schlüssel. Reihenfolge der Annahme und Fehler zur Umstrukturierung. JPEG, es wird vor dem Hochladen wieder komprimieren und hochladen! // Die spezifische Logik nach den Projektanforderungen geben. }; Funktion (Datei, Antwort) {// Spezifische Logik ... Konsole.log ('Erfolg hochladen .../n'); Math.ceil (Datei.Size / (5 * 1024), Datei: Datei.Name}, Funktion (Daten) {}); Diese Veranstaltung wird abgeschlossen, unabhängig von Erfolg oder Misserfolg $ ("#Btncancel"). Click (function () {// logistische Verarbeitung ..}); id = "btncancel"> upload upload </button> </div> </div> </body> </html>Backend -Aktion:
/** * Beschreibung: com.ims.action * Autor: elf * Datum: 2017/12/26 10:50 */@controller ("FileAction") öffentliche Klasse Fileaction {/ * Verwandte Parameter für jede kleine Datei, die zum Empfang von Segmentierungsanforderung * // Denken Sie daran, die entsprechende Get -Set -Methode zu erhalten // Upload -Datei (gleiche Datei -Datei). // Dateiname private Zeichenfolge UploadFileName; // TYP -Typ private Zeichenfolge hochladen uploadContentType; /** * Die folgenden Variablen sind öffentlich, es gibt zu viele Parameter, daher möchte ich sie nicht auf privat einstellen und dann die GET and Set -Methode schreiben. Public String GUID; // Merge und Split werden beide zum Empfangen und Senden von Merge -Anfragen der öffentlichen String -Dateinamen verwendet. // Dateiname öffentliche Zeichenfolgenbrocken; // Segmentnummer // Wenn Dateien in Scherben hochgeladen werden, wird diese Methode jedes Mal aufgerufen, wenn eine kleine Datei hochgeladen wird. Dies unterscheidet sich nicht von gewöhnlichen Speichern von Dateien, die öffentliche void uploadFile2 () Ausnahme ausgelöst {String Str = "D:/Upload44/Divide/"; // Datei speichern Pfad // Speichern Sie den Pfad jeder kleinen Datei Zeichenfolge RealPath = Str + Guid + "/" + Chunk; Datei tmp = neue Datei (RealPath); FileUtils.copyFile (Upload, TMP); System.out.println ("Datei hochladen"+UploadFileName+", welcher Block:"+Chunk+", Größe:"+(Upload.Length ()/1024/1024)+"M"); } // Datei merge public void mergeFile () löst Ausnahme aus {String path = "d:/upload44/merge/"; // Merge Ordner neue Datei (Pfad) .MkDir (); // Erstellen Sie merged Dateidatei newfile = new Datei (Pfad + Dateiname); if (! newfile.exists ()) {newfile.createNewFile (); } FileOutputStream outputStream = new FileOutputStream (newfile, true); // Datei anhängen an byte [] byt = new byte [10 * 1024 * 1024]; Int len; FileInputStream temp = null; // Shash -Datei für (int i = 0; i <integer.parseInt (Teile); i ++) {// "d:/upload44/Divide/" + goid + "/" + i, um den Pfad der Divided Small Datei temp = new Fileputstream ("NEW -Datei (" D:/Upload44/Divided/") zu speichern. while ((len = temp.read (byt))! = -1) {System.out.println (len); outputStream.write (byt, 0, len); } temp.close (); } // Wenn alle Anhänge geschrieben sind, kann der Stream geschlossen werden. // Shard -Datei String path2 = "d:/upload44/divide/" + guid; FileUtils.Deletedirectory (neue Datei (PATH2)); // Alle Inhalte im Verzeichnissystem löschen. } öffentliche Datei getUpload () {return upload; } public void setUpload (Datei -Upload) {this.Upload = upload; } public String getUploadFileName () {return uploadFileName; } public void setUploadFileName (String uploadFileName) {this.UploadFileName = UploadFileName; } public String GetUploadContentType () {return uploadContentType; } public void setUploadContentType (String uploadContentType) {this.UploadContentType = UploadContentType; }}Struts.xml Konfiguration:
<action name = "uploadFile2" methode = "uploadFile2"> </action> <action name = "mergeFile" methode = "mergeFile"> </action>
OK, hier ist das Hochladen eines einfachen Haltepunkts der Dateifragmentierung abgeschlossen.
Der Hintergrund empfängt übrigens nur einige einfache Parameter, und natürlich gibt es mehr als die oben genannten Parameter vom Front-End-Webuloader. Daher können Sie lernen, den F12 -Debugging -Modus zu verwenden, um die gesendeten Anfragen und zugehörigen Anforderungsparameter anzuzeigen. Ich werde hier nicht darüber reden.
Laufen Screenshot:
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.