移动端通过HTML5实现文件上传功能
PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现。
用的技术主要是:
ajax
FileReader
FormData
HTML结构:
<p class="camera-area"> <form enctype="multipart/form-data" method="post"> <input type="file" name="fileToUpload" class="fileToUpload" accept="image/*" capture="camera"/> <p class="upload-progress"><span></span></p> </form> <p class="thumb"></p> </p>
已经封装好的upload.js,依赖zepto
(function($) { $.extend($.fn, { fileUpload: function(opts) { this.each(function() { var $self = $(this); var doms = { "fileToUpload": $self.find(".fileToUpload"), "thumb": $self.find(".thumb"), "progress": $self.find(".upload-progress") }; var funs = { //选择文件,获取文件大小,也可以在这里获取文件格式,限制用户上传非要求格式的文件 "fileSelected": function() { var files = (doms.fileToUpload)[0].files; var count = files.length; for (var index = 0; index < count; index++) { var file = files[index]; var fileSize = 0; if (file.size > 1024 * 1024) fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB'; else fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB'; } funs.uploadFile(); }, //异步上传文件 uploadFile: function() { var fd = new FormData();//创建表单数据对象 var files = (doms.fileToUpload)[0].files; var count = files.length; for (var index = 0; index < count; index++) { var file = files[index]; fd.append(opts.file, file);//将文件添加到表单数据中 funs.previewImage(file);//上传前预览图片,也可以通过其他方法预览txt } var xhr = new XMLHttpRequest(); xhr.upload.addEventListener("progress", funs.uploadProgress, false);//监听上传进度 xhr.addEventListener("load", funs.uploadComplete, false); xhr.addEventListener("error", opts.uploadFailed, false); xhr.open("POST", opts.url); xhr.send(fd); }, //文件预览 previewImage: function(file) { var gallery = doms.thumb; var img = document.createElement("img"); img.file = file; doms.thumb.html(img); // 使用FileReader方法显示图片内容 var reader = new FileReader(); reader.onload = (function(aImg) { return function(e) { aImg.src = e.target.result; }; })(img); reader.readAsDataURL(file); }, uploadProgress: function(evt) { if (evt.lengthComputable) { var percentComplete = Math.round(evt.loaded * 100 / evt.total); doms.progress.html(percentComplete.toString() + '%'); } }, "uploadComplete": function(evt) { alert(evt.target.responseText) } }; doms.fileToUpload.on("change", function() { doms.progress.find("span").width("0"); funs.fileSelected(); }); }); } }); })(Zepto);
调用方法:
$(".camera-area").fileUpload({ "url": "savetofile.php", "file": "myFile" });
PHP部分:
<?php if (isset($_FILES['myFile'])) { // Example: writeLog($_FILES); move_uploaded_file($_FILES['myFile']['tmp_name'], "uploads/" . $_FILES['myFile']['name']); echo 'successful'; } function writeLog($log){ if(is_array($log) || is_object($log)){ $log = json_encode($log); } $log = $log."\r\n"; file_put_contents('log.log', $log,FILE_APPEND); } ?>
相关文章:

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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.

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

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

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

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

HTML5, CSS et JavaScript doivent être combinés efficacement avec des balises sémantiques, un ordre de chargement raisonnable et une conception de découplage. 1. Utilisez des étiquettes sémantiques HTML5, telles que l'amélioration de la clarté structurelle et de la maintenabilité, qui est propice au référencement et à l'accès sans barrière; 2. CSS doit être placé, utiliser des fichiers externes et se séparer par module pour éviter les styles en ligne et les problèmes de chargement retardés; 3. JavaScript est recommandé d'être introduit à l'avant et d'utiliser un repère ou une asynchronisation pour charger de manière asynchrone pour éviter le blocage du rendu; 4. Réduisez une forte dépendance entre les trois, conduisez le comportement à travers les attributs de données * et l'état de contrôle du nom de classe et améliorez l'efficacité de la collaboration grâce à des spécifications de nommage unifiées. Ces méthodes peuvent optimiser efficacement les performances des pages et collaborer avec les équipes.

Il s'agit d'un élément au niveau du bloc, adapté à la mise en page; Il s'agit d'un élément en ligne, adapté à l'emballage du contenu texte. 1. Occuper exclusivement une ligne, une largeur, une hauteur et des marges peuvent être définies, qui sont souvent utilisées dans la disposition structurelle; 2. Aucune ligne ne se casse, la taille est déterminée par le contenu et convient aux styles de texte locaux ou aux opérations dynamiques; 3. Lors du choix, il doit être jugé en fonction de la question de savoir si le contenu a besoin d'espace indépendant; 4. Il ne peut pas être imbriqué et ne convient pas à la mise en page; 5. La priorité est donnée à l'utilisation des étiquettes sémantiques pour améliorer la clarté structurelle et l'accessibilité.

HTML5Introduit newinputTypesthatenHanceFormFonctionality andUserexperiendByImprovingValidation, UI, andmobilekeyboardlayouts.1.emailvalidateSemailAddressAndSupportsMultiplentries.2.urlchecksforvalidwebaddressandtriggersurl-optimizedkeyboard

Pour obtenir l'emplacement actuel de l'utilisateur, utilisez le HTML5 GeolocationAPI. Cette API fournit des informations telles que la latitude et la longitude après l'autorisation de l'utilisateur. La méthode principale est GetCurrentPosition (), qui nécessite une gestion réussie et d'erreur pour être gérée; Dans le même temps, faites attention à la condition préalable HTTPS, au mécanisme d'autorisation de l'utilisateur et au traitement du code d'erreur. ① Appelez GetCurrentPosition pour obtenir le poste une fois, et un rappel d'erreur sera déclenché en cas d'échec; ② L'utilisateur doit l'autoriser, sinon il ne peut pas être obtenu et peut ne plus être invité; ③ Le traitement des erreurs doit faire la distinction entre le rejet, le délai d'expiration, l'emplacement indisponible, etc.; ④ Activer la haute précision, le délai d'expiration, etc., et peut être configuré via le troisième paramètre; ⑤ L'environnement en ligne doit utiliser HTTPS, sinon il peut être limité par le navigateur.

La différence entre asynchronisation et report est le synchronisation d'exécution du script. Async permet au téléchargement des scripts en parallèle et exécuté immédiatement après le téléchargement, sans garantir l'ordre d'exécution; Le Refer exécute les scripts dans l'ordre après la fin de l'analyse HTML. Les deux évitent de bloquer l'analyse HTML. L'utilisation de l'async convient aux scripts autonomes tels que l'analyse du code; Le report est adapté aux scénarios où vous devez accéder au DOM ou compter sur d'autres scripts.

La clé de l'utilisation de boutons radio dans HTML5 est de comprendre comment ils fonctionnent et d'organiser correctement la structure du code. 1. L'attribut de nom de chaque bouton radio doit être le même pour obtenir une sélection mutuellement exclusive; 2. Utilisez des balises d'étiquette pour améliorer l'accessibilité et cliquer sur l'expérience; 3. Il est recommandé d'envelopper chaque option dans une div ou un étiquette pour améliorer la clarté structurelle et le contrôle du style; 4. Définissez les sélections par défaut via l'attribut vérifié; 5. La valeur de la valeur doit être concise et significative, ce qui est pratique pour le traitement de soumission de formulaire; 6. Le style peut être personnalisé via CSS, mais la fonction doit être assurée d'être normale. La maîtrise de ces points clés peut éviter efficacement des problèmes courants et améliorer l'efficacité de l'utilisation.

La différence de base entre LocalStorage et SessionStorage réside dans la persistance des données et la portée. 1. Cycle de vie des données: les données localStorage sont stockées pendant une longue période à moins d'être effacées manuellement, et les données de SessionStorage sont effacées après la fermeture de l'onglet; 2. Différence de portée: LocalStorage est partagé entre tous les onglets sur le même site Web, et SessionStorage est stocké indépendamment; 3. Scénario d'utilisation: LocalStorage convient pour enregistrer des données à long terme telles que les préférences de l'utilisateur et l'état de connexion, SessionStorage convient aux données de formulaire temporaire ou à un processus de session unique; 4. Cohérence de l'API: deux méthodes de fonctionnement

Oui, il fait partie de HTML5, mais son utilisation a progressivement diminué et est controversée. Utilisé pour combiner le titre principal avec le sous-titre afin que seul le plus haut niveau de titres soit identifié dans le plan du document; Par exemple, le titre principal et le sous-titre peuvent être enveloppés pour indiquer qu'ils ne sont que des titres auxiliaires plutôt que des titres de chapitre indépendants; Cependant, les raisons pour lesquelles ils ne sont plus largement utilisées incluent: 1. Les lecteurs du navigateur et de l'écran leur sont un support incohérent, 2. Il existe des alternatives plus simples telles que l'utilisation de CSS pour contrôler les styles, 3. L'algorithme de contour du document HTML n'est pas largement pris en charge; Malgré cela, il peut toujours être pris en compte dans des sites Web ou des documents avec des exigences sémantiques élevées; Alors que dans la plupart des cas, les développeurs ont tendance à utiliser un seul, à gérer les styles via CSS et à maintenir des niveaux de titre clairs.
