Maison >développement back-end >tutoriel php >Utilisez ajax+php pour télécharger des fichiers
En théorie, il existe de nombreux plug-ins de téléchargement de fichiers/images de ce type, mais vous rencontrerez toujours divers problèmes lors de l'utilisation, tels que des problèmes de compatibilité, des problèmes d'arrière-plan, etc., donc comme je ne peux pas utiliser celui des autres les roues sont bonnes, je vais en construire une moi-même.
Dans cet article, jq.ajax et php sont utilisés pour implémenter la fonction de téléchargement. Le code frontal est généralement le même. Certains amis ont un arrière-plan qui n'est pas php. reportez-vous à la documentation dans votre langue pour le fonctionnement.
Jetons d'abord un coup d'œil aux rendus. L'ensemble de l'interface de téléchargement ressemble à ceci : Voir la démo
Idée générale :
1. Créez un paramètre d'entrée type = fichier, id = fichier, paramètre de style opacité : 0, position : absolue
2. Créez un calque de masque et définissez la position : absolue. et z-index est supérieur au fichier
3. Créez un objet FormData et placez le fichier dans FormData en tant que données
4. Créez un ajax, envoyez les données FormData à upload.php et écoutez. à l'événement progress d'ajax, renvoie la progression du téléchargement en temps réel
5. Affichez la réponse du serveur sur la page html
6. Une fois le téléchargement terminé, cliquez sur "Continuer le téléchargement" pour ouvrir la boîte de sélection de fichier et continuer le téléchargement.
La partie HTML est relativement simple :
<p class="upload"> <p class="uploadBox"> <span class="inputCover">选择文件</span> <form enctype=""> <input type="file" name="file" id="file" /> <button type="button" class="submit">上传</button> </form> <button type="button" class="upagain">继续上传</button> <span class="processBar"></span> <span class="processNum">未选择文件</span> </p> </p>
CSS, le style peut être ajusté librement selon vos préférences personnelles, voici pour référence seulement :
*{ font-family: 'microsoft yahei'; color: #4A4A4A; } .upload{ width: 700px; padding: 20px; border: 1px dashed #ccc; margin: 100px auto; border-radius: 5px; } .uploadBox{ width: 100%; height: 35px; position: relative; } .uploadBox input{ width: 200px; height: 30px; background: red; position: absolute; top: 2px; left: 0; z-index: 201; opacity: 0; cursor: pointer; } .uploadBox .inputCover{ width: 200px; height: 30px; position: absolute; top: 2px; left: 0; z-index: 200; text-align: center; line-height: 30px; font-size: 14px; border: 1px solid #009393; border-radius: 5px; cursor: pointer; } .uploadBox button.submit{ width: 100px; height: 30px; position: absolute; left: 230px; top: 2px; border-radius: 5px; border: 1px solid #ccc; background: #F0F0F0; outline: none; cursor: pointer; } .uploadBox button.submit:hover{ background: #E0E0E0; } .uploadBox button.upagain{ width: 100px; height: 30px; position: absolute; left: 340px; top: 2px; display: none; border-radius: 5px; border: 1px solid #ccc; background: #F0F0F0; outline: none; cursor: pointer; } .uploadBox button.upagain:hover{ background: #E0E0E0; } .processBar{ display: inline-block; width: 0; height: 7px; position: absolute; left: 500px; top: 14px; background: #009393; } .processNum{ position: absolute; left: 620px; color: #009393; font-size: 12px; line-height: 35px; }
Partie JS, jq.ajax :
$(document).ready(function(){ var inputCover = $(".inputCover"); var processNum = $(".processNum"); var processBar = $(".processBar"); //上传准备信息 $("#file").change(function(){ var file = document.getElementById('file'); var fileName = file.files[0].name; var fileSize = file.files[0].size; processBar.css("width",0); //验证要上传的文件 if(fileSize > 1024*2*1024){ inputCover.html("<font>文件过大,请重新选择</font>"); processNum.html('未选择文件'); document.getElementById('file').value = ''; return false; }else{ inputCover.html(fileName+' / '+parseInt(fileSize/1024)+'K'); processNum.html('等待上传'); } }) //提交验证 $(".submit").click(function(){ if($("#file").val() == ''){ alert('请先选择文件!'); }else{ upload(); } }) //创建ajax对象,发送上传请求 function upload(){ var file = document.getElementById('file').files[0]; var form = new FormData(); form.append('myfile',file); $.ajax({ url: 'upload.php',//上传地址 async: true,//异步 type: 'post',//post方式 data: form,//FormData数据 processData: false,//不处理数据流 !important contentType: false,//不设置http头 !important xhr:function(){//获取上传进度 myXhr = $.ajaxSettings.xhr(); if(myXhr.upload){ myXhr.upload.addEventListener('progress',function(e){//监听progress事件 var loaded = e.loaded;//已上传 var total = e.total;//总大小 var percent = Math.floor(100*loaded/total);//百分比 processNum.text(percent+"%");//数显进度 processBar.css("width",percent+"px");//图显进度}, false); } return myXhr; }, success: function(data){//上传成功回调 console.log("文档当前位置是:"+data);//获取文件链接 document.cookie = "url="+data;//此行可忽略 $(".submit").text('上传成功'); $(".upagain").css("display","block"); } }) } //继续上传 $(".upagain").click(function(){ $("#file").click(); processNum.html('未选择文件'); processBar.css("width",0); $(".submit").text('上传'); document.getElementById('file').value = ''; $(this).css("display","none"); }) })
Téléchargement terminé, upload.php traite le fichier (pour la sécurité du serveur, seuls les extraits de code sont publiés) :
<?php if(isset($_FILES["myfile"])){ move_uploaded_file($_FILES["myfile"]["tmp_name"],"ajax/".$_FILES["myfile"]["name"]); echo "http://www.xuxiangbo.com/ajax/".$_FILES["myfile"]["name"]; }else{ echo 'no file'; } ?>
Réimprimé du blog
Auteur : Imin
Lien : http://blog.xuxiangbo.com/im-22.html
Je pense que vous avez lu le cas dans cet article. Vous maîtrisez la méthode. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !
Lecture recommandée :
PHP+sftp pour implémenter le téléchargement et le téléchargement de fichiers
Quatre types Comment générer une chaîne avec des mots aléatoires en php
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!