Écrit avant:
Au cours des derniers jours, j'ai étudié le téléchargement de fichiers Webuploader. Le blog précédent enregistre des exemples d'utilisation de WebUploader pour simplement télécharger des fichiers. Aujourd'hui, je vais également enregistrer les exemples de téléchargement de fragments et de points d'arrêt. Dans le parc du blog, j'ai également vu des informations. Fondamentalement, le traitement backend des données est les servlets ou SpringMVC. Étant donné que le projet récent a toujours été Struts2, nous utiliserons l'action dans Struts2 pour traiter les données pour obtenir l'effet du téléchargement de fichiers en morceaux.
1. Qu'est-ce que le téléchargement de Shard?
Comme son nom l'indique, cela signifie diviser le fichier en pièces, c'est-à-dire que le fichier soit divisé en plusieurs petits fichiers, puis le télécharger. L'avantage de cela est qu'il facilite le téléchargement de fichiers volumineux.
2. Idées générales pour le téléchargement des fragments:
1. Sur la page de la réception, sélectionnez le fichier et cliquez sur le bouton pour télécharger.
2. Webuploader divise les fichiers téléchargés en numéros spécifiés et les envoie au backend du serveur un par un.
3. Le serveur reçoit les petits fichiers divisés et les stocke dans un dossier temporaire.
4. Une fois que le serveur a reçu le petit fichier divisé, la page de premier plan exécute la fonction de téléchargement réussi.
5. Dans la fonction de téléchargement réussi, envoyez une demande au serveur et demandez pour fusionner les petits fichiers dans un fichier entier.
6. L'arrière-plan du serveur fusionne les fichiers et supprime les fichiers temporaires qui stockent de petits fichiers une fois la fusion terminée.
Après avoir compris le processus général du téléchargement des fragments, veuillez passer à la démo.
Page de réception:
<% @ page contentType = "text / html; charset = utf-8" linguisse = "java"%> <% string scheme = request.getscheme (); String servername = request.getServerName (); String contextPath = request.getContextPath (); int port = request.getServerport (); // l'accès au site Web et la chaîne de path baliseUrl = schéma + ": //" + servername + ":" + port + contextPath; request.setAttribute("baseURL", baseURL);%><html><head> <title> Simple example of uploading files with fragmented </title> <%--Introducing css styles--%> <link href="${baseURL}/webuploader0.1.5/webuploader.css" rel="external nofollow" rel="stylesheet" Type = "Text / CSS" /> <Script Src = "$ {BUSURL} /LIGERUI2/JQUERY/JQUERY-1.9.0.min.js" Type = "Text / JavaScript"> </ Script> <% - Introduction de fichiers Fichier Plugin -%> <Script Type = "Text / Javascript" src = "$ {b superseurl} /webuploader0.1.5/webuploader.min.js"> </ script> <script type = "Text / JavaScript"> $ (function () {/ * Pour la création de uploader, il est préférable d'attendre que l'élément DOM soit créé, sinon une erreur sera créée. Pour ignorer. Domaine de téléchargement de fichiers. Activé, il ne limitera pas le nombre de téléchargements en même temps, il entraînera des éclats acceptés par l'arrière-plan. réorganiser. Il est à nouveau avant le téléchargement! Permettez-moi de donner un exemple simple pour écrire $ un = $ (<div id = '+ file.id + "'>" + file.name + "</v>"); Pendant le téléchargement de fichiers. Logic ... Console.log ('télécharger le succès ... / n'); 1024 * 1024)), nom de fichier: nom}, fonction (data) {}); $ (# état "). FAILLEMENT. }); ble </div> </div> </ body> </html>Action backend:
/ ** * Description: com.ims.action * Auteur: Eleven * Date: 2017/12/26 10:50 * / @ Controller ("FileAction") Classe publique FileAction {/ * Paramètres associés pour chaque petit fichier utilisé pour recevoir une demande de segmentation * / // N'oubliez pas de fournir la méthode de file d'attente Get correspondante // Upload Fichier Object (la même valeur de nom de formulaire de formulaire = fichier) File Upload File Up up up; // Nom de fichier Private String uploadFileName; // Télécharger Type Private String UploadContentType; / ** * Les variables suivantes sont publiques, il y a trop de paramètres, donc je ne veux pas le définir sur privé et ensuite écrire la méthode Get and Set, * Utilisez simplement public simplement par paresseux * / // numéro de repos de fichiers public public; Public String Guid; // Merge et Split sont tous deux utilisés pour recevoir et envoyer des demandes de fusion Nom de fichier de chaîne publique; // Nom de fichier Public String Chunks; // Numéro de segment // Lors du téléchargement de fichiers dans des éclats, cette méthode sera appelée chaque fois qu'un petit fichier est téléchargé, ce qui n'est pas différent des fichiers de sauvegarde ordinaires publics void uploadFile2 () lance l'exception {string str = "d: / upload44 / divide /"; // Path de sauvegarde du fichier // Enregistrer le chemin de chaque petite chaîne de fichiers realPath = str + guide + "/" + chunk; Fichier tmp = nouveau fichier (realPath); FileUtils.copyFile (upload, tmp); System.out.println ("Fichier de téléchargement" + uploadFileName + ", qui bloc:" + chunk + ", taille:" + (upload.length () / 1024/1024) + "m"); } // Fichier Merge public void mergeFile () lève une exception {String path = "d: / upload44 / fusiter /"; // Créer un dossier de fusion Nouveau fichier (chemin) .mkdir (); // Créer un fichier fusionné newFile = nouveau fichier (path + nom de fichier); if (! newFile.exists ()) {newFile.CreateEwFile (); } FileOutputStream OutputStream = new FileOutputStream (newFile, true); // Ajouter un fichier append à byte [] byt = new byte [10 * 1024 * 1024]; int len; FileInputStream temp = null; // Fichier Shash pour (int i = 0; i <Integer.ParseInt (Chunks); i ++) {// "d: / upload44 / divide /" + Guid + "/" + i pour enregistrer le chemin du petit fichier divisé Temp = new FileInputStream (New Fichier ("d: / upload44 / divide /" + Guid + "+ i); while ((len = temp.read (byt))! = -1) {System.out.println (Len); outputStream.Write (Byt, 0, Len); } temp.close (); } // Lorsque toutes les écritures d'ajout sont terminées, le flux peut être fermé OutputStream.close (); // Supprimer la chaîne de fichiers Shard Path2 = "d: / upload44 / divide /" + Guid; FileUtils.DeleteDirectory (nouveau fichier (path2)); // supprimer tous les contenus dans le répertoire System.out.println ("Success! Guid =" + Guid + "; Chunks =" + Chunks + "; filename =" + filename); } public File getUpload () {return upload; } public void setupload (fichier 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 Configuration:
<action name = "uploadfile2" méthode = "uploadfile2"> </ action> <action name = "mergefile" méthode = "MergeFile"> </ action>
Ok, ici, le téléchargement d'un point d'arrêt de fragmentation de fichiers simple est terminé.
Soit dit en passant, l'arrière-plan ne reçoit que des paramètres simples, et bien sûr, il y a plus que les paramètres ci-dessus passés du webuploader frontal. Par conséquent, vous pouvez apprendre à utiliser le mode de débogage F12 pour afficher les demandes envoyées et les paramètres de demande associés. Je n'en parlerai pas ici.
Capture d'écran en cours:
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.