


Implémentation HTML5 WebSocket de plusieurs téléchargements de fichiers en même temps
Dans les applications HTTP traditionnelles, il est très difficile de télécharger plusieurs fichiers en même temps et de vérifier la progression du téléchargement. Bien sûr, il existe également des composants de téléchargement de fichiers basés sur SWF qui offrent cette commodité. pratique. Le contrôle de la lecture et du téléchargement des fichiers est très flexible. HTML5 fournit une série d'AIP pour la lecture des fichiers, y compris le calcul du contenu d'une certaine partie du fichier. En combinaison avec Websocket, la transmission des fichiers devient plus pratique. et flexible Ce qui suit est un moyen simple d'implémenter plusieurs applications de téléchargement de fichiers en même temps en utilisant HTML5 combiné avec websocet
Implémentation de la fonction
Un aperçu approximatif. des fonctions qui doivent être exécutées :
La fonction principale est que les utilisateurs peuvent directement glisser et déposer les fichiers du dossier sur la page Web et les télécharger, et le Les informations sur la progression du téléchargement seront affichées pendant le processus de téléchargement.
Encapsulation de la classe FileInfo
Afin de faciliter la lecture des informations sur le fichier, une classe d'objet simple pour lire les informations sur le fichier est encapsulée. basé sur le fichier original.
function FileInfo(file, pagesize) { this.Size = file.size; this.File = file; this.FileType = file.type; this.FileName = file.name; this.PageSize = pagesize; this.PageIndex = 0; this.Pages = 0; this.UploadError = null; this.UploadProcess = null; this.DataBuffer = null; this.UploadBytes = 0; this.ID = Math.floor(Math.random() * 0x10000).toString(16); this.LoadCallBack = null; if (Math.floor(this.Size % this.PageSize) > 0) { this.Pages = Math.floor((this.Size / this.PageSize)) + 1; } else { this.Pages = Math.floor(this.Size / this.PageSize); } } FileInfo.prototype.Reset = function () { this.PageIndex = 0; this.UploadBytes = 0; } FileInfo.prototype.toBase64String = function () { var binary = '' var bytes = new Uint8Array(this.DataBuffer) var len = bytes.byteLength; for (var i = 0; i < len; i++) { binary += String.fromCharCode(bytes[i]) } return window.btoa(binary); } FileInfo.prototype.OnLoadData = function (evt) { var obj = evt.target["tag"]; if (evt.target.readyState == FileReader.DONE) { obj.DataBuffer = evt.target.result; if (obj.LoadCallBack != null) obj.LoadCallBack(obj); } else { if (obj.UploadError != null) obj.UploadError(fi, evt.target.error); } } FileInfo.prototype.Load = function (completed) { this.LoadCallBack = completed; if (this.filereader == null || this.filereader == undefined) this.filereader = new FileReader(); var reader = this.filereader; reader["tag"] = this; reader.onloadend = this.OnLoadData; var count = this.Size - this.PageIndex * this.PageSize; if (count > this.PageSize) count = this.PageSize; this.UploadBytes += count; var blob = this.File.slice(this.PageIndex * this.PageSize, this.PageIndex * this.PageSize + count); reader.readAsArrayBuffer(blob); }; FileInfo.prototype.OnUploadData = function (file) { var channel = file._channel; var url = file._url; channel.Send({ url: url, parameters: { FileID: file.ID, PageIndex: file.PageIndex, Pages: file.Pages, Base64Data: file.toBase64String()} }, function (result) { if (result.status == null || result.status == undefined) { file.PageIndex++; if (file.UploadProcess != null) file.UploadProcess(file); if (file.PageIndex < file.Pages) { file.Load(file.OnUploadData); } } else { if (file.UploadError != null) file.UploadError(file, data.status); } }); } FileInfo.prototype.Upload = function (channel, url) { var fi = this; channel.Send({ url: url, parameters: { FileName: fi.FileName, Size: fi.Size, FileID: fi.ID} }, function (result) { if (result.status == null || result.status == undefined) { fi._channel = channel; fi._url = result.data; fi.Load(fi.OnUploadData); } else { if (file.UploadError != null) file.UploadError(fi, result.status); } }); }
Le traitement de la classe
est très simple. Initialisez certaines informations du fichier en initialisant le fichier et en spécifiant la taille du bloc, comme le nombre de pages, la taille de la page, etc. Bien entendu, le plus important est d'encapsuler la méthode Upload correspondant au fichier, qui est utilisée pour télécharger le fichier. Les informations de bloc sont regroupées dans les informations base64 et envoyées au fichier. serveur via Websocket.
Glisser-déposer de fichiers
Il n'est pas nécessaire de faire des choses compliquées pour accepter le glisser-déposer de fichiers système en HTML5. Pour faire les choses, il vous suffit de faire des choses compliquées. pour lier les événements pertinents à l'élément conteneur
function onDragEnter(e) { e.stopPropagation(); e.preventDefault(); } function onDragOver(e) { e.stopPropagation(); e.preventDefault(); $(dropbox).addClass('rounded'); } function onDragLeave(e) { e.stopPropagation(); e.preventDefault(); $(dropbox).removeClass('rounded'); } function onDrop(e) { e.stopPropagation(); e.preventDefault(); $(dropbox).removeClass('rounded'); var readFileSize = 0; var files = e.dataTransfer.files; if (files.length > 0) { onFileOpen(files); } }
Il vous suffit d'obtenir les fichiers glisser-déposer pertinents pendant le processus onDrop. des tutoriels peuvent aider.
À ce stade, il vous suffit de créer l'objet FileInfo approprié pour le fichier sélectionné et d'appeler la méthode de téléchargement
function onFileOpen(files) { if (files.length > 0) { for (var i = 0; i < files.length; i++) { var info = new FileInfo(files[i], 32768); uploads.push(info); info.UploadProcess = onUploadProcess; addUploadItem(info); } } }
. Via l'événement UploadProcess Effectuez une mise à jour des paramètres pour le téléchargement des informations sur la progression du fichier
function onUploadProcess(file) { $('#p_' + file.ID).progressbar({ value: (file.PageIndex / file.Pages) * 100, text: file.FileName + '[' + file.UploadBytes + '/' + file.Size + ']' }); }
Serveur C#
Utiliser Beetle pour mettre à jour websocket L'implémentation correspondante côté serveur est très simple
/// <summary> /// Copyright © henryfan 2012 ///CreateTime: 2012/12/14 21:13:34 /// </summary> public class Handler { public void UploadPackage(string FileID, int PageIndex, int Pages, string Base64Data) { Console.WriteLine("FileID:{2},PageIndex:{0} Pages:{1} DataLength:{3}", PageIndex, Pages, FileID,Base64Data.Length); } public string UploadFile(string FileID, string FileName, long Size) { Console.WriteLine("FileID:{2},FileName:{0} Size:{1}", FileName, Size, FileID); return "Handler.UploadPackage"; } }
Il existe deux méthodes côté serveur, l'une consiste à télécharger une demande de fichier et l'autre consiste à télécharger la méthode de réception de bloc de fichiers.
Résumé
Seul le code simple ci-dessus peut réaliser la fonction de téléchargement de plusieurs fichiers en même temps. Ici, json est utilisé. pour traiter les informations téléchargées, le flux de fichiers doit donc être effectué. Un processus d'encodage base64, car les données soumises par la navigation websocket ont généralement un traitement MASK et la perte de base64 est relativement lourde. En fait, websocket fournit un format de paquet de flux. (arraybuffer) ; bien sûr, ce type de traitement est opérationnel. Ce n'est pas aussi pratique et simple que json
Code de téléchargement : WebSocketUpload.rar
Ce qui précède. est le contenu de l'exemple de HTML5 WebSocket réalisant le téléchargement simultané de plusieurs fichiers. Pour plus de contenu connexe, veuillez suivre le site Web PHP chinois (www.php.cn) !

H5 est HTML5, la cinquième version de HTML. HTML5 améliore l'expressivité et l'interactivité des pages Web, introduit de nouvelles fonctionnalités telles que les balises sémantiques, le support multimédia, le stockage hors ligne et le dessin de toile, et favorise le développement de la technologie Web.

L'accessibilité et la conformité aux normes du réseau sont essentielles au site Web. 1) L'accessibilité garantit que tous les utilisateurs ont un accès égal au site Web, 2) les normes du réseau suivent pour améliorer l'accessibilité et la cohérence du site Web, 3) l'accessibilité nécessite l'utilisation de HTML sémantique, de navigation par clavier, de contraste des couleurs et de texte alternatif, 4) suivant ces principes n'est pas seulement une exigence morale et légale, mais également l'amplification de la base d'utilisateurs.

La balise H5 dans HTML est un titre de cinquième niveau qui est utilisé pour marquer des titres ou des sous-titres plus petits. 1) La balise H5 aide à affiner la hiérarchie du contenu et à améliorer la lisibilité et le référencement. 2) Combiné avec CSS, vous pouvez personnaliser le style pour améliorer l'effet visuel. 3) Utilisez raisonnablement les balises H5 pour éviter les abus et assurer la structure du contenu logique.

Les méthodes de création d'un site Web dans HTML5 incluent: 1. Utilisez des balises sémantiques pour définir la structure de la page Web, telle que, etc.; 2. Intégrer le contenu multimédia, l'utilisation et les balises; 3. Appliquer des fonctions avancées telles que la vérification du formulaire et le stockage local. Grâce à ces étapes, vous pouvez créer une page Web moderne avec une structure claire et des fonctionnalités riches.

Une structure de code H5 raisonnable permet à la page de se démarquer parmi beaucoup de contenu. 1) Utilisez des étiquettes sémantiques telles que, etc. pour organiser le contenu pour rendre la structure claire. 2) Contrôlez l'effet de rendu des pages sur différents appareils via la disposition CSS tels que Flexbox ou Grid. 3) Implémentez la conception réactive pour s'assurer que la page s'adapte à différentes tailles d'écran.

Les principales différences entre les versions HTML5 (H5) et les anciennes de HTML incluent: 1) H5 introduit des balises sémantiques, 2) prend en charge le contenu multimédia et 3) fournit des fonctions de stockage hors ligne. H5 améliore la fonctionnalité et l'expressivité des pages Web via de nouvelles balises et API, telles que et des balises, améliorant l'expérience utilisateur et les effets SEO, mais doit faire attention aux problèmes de compatibilité.

La différence entre H5 et HTML5 est: 1) HTML5 est une norme de page Web qui définit la structure et le contenu; 2) H5 est une application Web mobile basée sur HTML5, adaptée au développement rapide et au marketing.

Les caractéristiques principales de HTML5 incluent des balises sémantiques, une prise en charge multimédia, une amélioration de la forme, un stockage hors ligne et un stockage local. 1. Tags sémantiques tels que, améliorer la lisibilité du code et l'effet SEO. 2. Prise en charge multimédia simplifie le processus d'intégration du contenu multimédia via et des balises. 3. L'amélioration du formulaire introduit de nouveaux types d'entrée et des propriétés de vérification, simplifiant le développement de formulaire. 4. Stockage hors ligne et stockage local Améliorez les performances de la page Web et l'expérience utilisateur via ApplicationCache et LocalStorage.


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Version Mac de WebStorm
Outils de développement JavaScript utiles

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

mPDF
mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PhpStorm version Mac
Le dernier (2018.2.1) outil de développement intégré PHP professionnel
