Maison  >  Article  >  interface Web  >  Implémentation d'une opération de téléchargement de fichiers sans actualisation en masquant les compétences iframe_javascript

Implémentation d'une opération de téléchargement de fichiers sans actualisation en masquant les compétences iframe_javascript

WBOY
WBOYoriginal
2016-05-16 15:10:341555parcourir

En fait, avant l'apparition d'Ajax, les applications Web pouvaient également être sans actualisation. À cette époque, cela se faisait principalement via IFrame. Bien sûr, après l’apparition d’Ajax, les gens ont afflué vers le camp d’Ajax et iFrame est devenu moins populaire. Mais utiliser iFrame pour télécharger des fichiers sans les actualiser est en effet un bon choix.

La solution est de gérer l'opération de téléchargement via une iframe cachée. J'utilise ReactJS, amazeui, nodejs

La cible 1.html pointe vers le nom de l'iframe, ce qui signifie que l'opération de téléchargement est transmise à l'iframe pour traitement

.
<form id="supplyformFile" name="formFile" method="post" target="frameFile"
encType="multipart/form-data">
<div className="am-form-file">
<button type="button" className="am-btn am-btn-default am-btn-sm">
<i className="am-icon-cloud-upload"></i> 选择要上传的文件
</button>
<input type="file" id="fileUp" onChange={this.UploadSupplyer} name="fileUp" />
</div> 
<div id="supplyfile_div"></div>
</form>
<iframe id="frameFile" name="frameFile" style={{display: 'none'}}></iframe>
<input type="hidden" id="supplyfile" />

Le traitement 2.JS soumet le formulaire après la sélection du fichier

UploadSupplyer:function(){
var path = document.all.fileUp.value;
if(!path){return false;}
$('.loadinfo').html('<p>文件上传中...</p>').removeClass("none");
$('#supplyformFile').submit();
},

Traitement du serveur 3.nodejs, étant donné que la page de traitement est le domaine du serveur nodejs, il y a des problèmes inter-domaines dans l'iframe, vous devez donc utiliser la méthode postMessage H5 pour transmettre les paramètres à la page de formulaire en dehors du iframe

var fname = req.files.fileUp.path.replace("publicfiles", "").replace("public/files/", "");
res.writeHead(200, {'Content-type' : 'text/html'});
res.write('<script>');
res.write('window.parent.postMessage("'+fname+'","*");');
res.end('</script>');

4.JS traitant les résultats du téléchargement

window.addEventListener('message',function(e){
var fname=e.data;
$('#supplyfile').val(fname);
$(".loadinfo").addClass("none");
$(".successinfo").html("<p>文件上传成功</p>").removeClass("none");
setTimeout(function() { $(".successinfo").addClass("none");}, 2000);
$("#supplyfile_div").html('<span class="am-icon-file-o"></span> <a target="_blank" href="'+hosts+'/files/'+fname+'">供应商确认单</a>');
},false);

Ce qui précède est l'introduction de l'éditeur à l'opération de téléchargement de fichiers sans actualiser en masquant l'iframe. J'espère que cela sera utile à tout le monde !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn