Heim > Web-Frontend > js-Tutorial > Asynchroner Datei- oder Bild-Upload Ajax

Asynchroner Datei- oder Bild-Upload Ajax

php中世界最好的语言
Freigeben: 2018-04-02 16:45:40
Original
1317 Leute haben es durchsucht

Dieses Mal werde ich Ihnen den asynchronen Datei- oder Bild-Upload mit Ajax vorstellen. Was sind die Vorsichtsmaßnahmen für den asynchronen Datei- oder Bild-Upload mit Ajax?

Wie wir alle wissen, verfügen die meisten großen Websites heutzutage grundsätzlich über eine Funktion zum

Datei-Upload . Benutzer können ihre Lieblingsbilder oder andere Dateien online speichern, damit sie bei der späteren Verwendung leicht gefunden werden können. , aber wie richtet man die Datei-Upload-Funktion einer Webseite ein? Heute nehme ich das Hochladen von Bildern als Beispiel, um Ihnen die spezifischen Schritte der Datei-Upload-Funktion zu zeigen.

Tatsächlich gibt es zwei Möglichkeiten, Dateien hochzuladen: eine über die Formularübermittlung und die andere über die asynchrone Übermittlung über Ajax. Bei der Formularübermittlung gibt es jedoch ein Problem Sobald der Upload abgeschlossen ist, kann der asynchrone Upload nicht implementiert werden, sodass jetzt fast alle Websites den asynchronen Ajax-Upload verwenden.

Zuerst erstelle ich ein Formular, der Code lautet wie folgt:

 <form action="" id="form">
  用户名:<input type="text" name="user"/></br>
  密码:<input type="password" name="pass" /></br>
  性别:<input type="radio" name="sex" value="男"/>男
   <input type="radio" name="sex" value="女"/>女
  头像:<input type="file" id="file" name="file"/></br>
  <button id="btn" type="button">提交</button>
 </form>
 <p class="con"></p>
Nach dem Login kopieren
Nachdem die Erstellung abgeschlossen ist, müssen wir zunächst die Informationen des vom Benutzer hochgeladenen Bildes daraus abrufen Website, der Code lautet wie folgt

var imgs=[];//存储图片链接
 //为文件上传添加change事件
 var fileM=document.querySelector("#file");
 $("#file").on("change",function(){
  console.log(fileM.files);
  //获取文件对象,files是文件选取控件的属性,存储的是文件选取控件选取的文件对象,类型是一个数组
  var fileObj=fileM.files[0];
  //创建formdata对象,formData用来存储表单的数据,表单数据时以键值对形式存储的。
  var formData=new FormData();
  formData.append('file',fileObj);
Nach dem Login kopieren
Die formData hier ist das Objekt, das wir jetzt Dateiinformationen speichern möchten, und dann müssen wir es mithilfe einer Ajax-Anfrage an den Hintergrund senden:

  //创建ajax对象
  var ajax=new XMLHttpRequest();
  //发送POST请求
  ajax.open("POST","http://localhost/phpClass/file-upload/move_file.php",true);
  ajax.send(formData);
  ajax.onreadystatechange=function(){
  if (ajax.readyState == 4) {
   if (ajax.status>=200 &&ajax.status<300||ajax.status==304) {
   console.log(ajax.responseText);
   var obj=JSON.parse(ajax.responseText);
   alert(obj.msg);
   if(obj.err == 0){、
    //上传成功后自动动创建img标签放在指定位置
    var img =$("<img src=&#39;"+obj.msg+"&#39; alt=&#39;&#39; />");
    $(".con").append(img);
    imgs.push(obj.msg);
   }else{
    alert(obj.msg);
   }
   }
  }
  }
 });
Nach dem Login kopieren
Nachdem unsere Anfrage erfolgreich war, muss der Hintergrund die entsprechende Verarbeitung durchführen und das Bild im angegebenen Ordner speichern, damit das entsprechende PHP diese Vorgänge abschließen sollte:

<?php
//解决跨域问题
header("Access-Control-Allow-Origin:*");
//说明向前台返回的数据类型为JSON
header("Content-type:text/json");
//$_FILES超全局变量存储是文件数据,是一个关联数组
 $fileObj=$_FILES[&#39;file&#39;];
 var_dump($fileObj);
 if($fileObj["error"]==0){
 //判断文件是否合法
 $types=["jpg","jpeg","png","gif"];
 $type = explode("/", $fileObj["type"])[1];
 if(in_array($type, $types)){
  $time = time();//获取时间戳 返回一个整形
  //获取文件详细路径
  $filePath="http://localhost/phpClass/image1".$time.".".$type;
  echo $filePath;
  //移动文件
  $res=move_uploaded_file($fileObj["tmp_name"],"../image1/".$time.".".$type);
  if($res){
  $infor=array("err"=>0,"msg"=>"文件移动成功");
  }else{
  $infor=array("err"=>1,"msg"=>"文件移动失败");
  }
 }else{
  $infor=array("err"=>1,"msg"=>"文件格式不合法");
 }
 echo json_encode($infor);
 }
?>
Nach dem Login kopieren
Auf diese Weise haben wir Wenn Sie die gewünschten Bilder auf Ihre eigene Webseite hochladen möchten, kann Ihnen dieser Code helfen.

Anhang: Wenn Sie beim Hochladen einer Datei weitere Informationen über sich selbst anhängen müssen, müssen Sie diesen Code erst hinzufügen, nachdem die Front-End-Seitenanforderung abgeschlossen ist:

//完成form表单数据的提交
 $('#btn').on('click',function(){
//  serializeArray()将form表单控件中的数据序列化成数组,数组中含有若干对象,对象包含对应控件的name和value
  var infor = $('#form').serializeArray();
//  console.log(infor);
  var stu = {};
  for (var i=0;i<infor.length;i++) {
  var obj=infor[i];
  stu[obj.name] = obj.value;
  }
  stu["imgs"] = imgs;
  stu["imgs"] = imgs[0];
  //发送ajax请求
  $.ajax({
  url:"http://localhost/phpClass/file-upload/data.php",
  data:{
   parameter :JSON.stringify(stu)
  },
  success:function(res){
   console.log(res.msg);
  }
  });
 });
Nach dem Login kopieren
Glauben Sie es oder nicht Nachdem Sie den Fall in diesem Artikel gelesen haben, beherrschen Sie die Methode. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Warum verstümmelte Zeichen erscheinen, wenn Ajax JSON überträgt

Zusammenfassung von Ajax, die Anfänger lernen müssen

Das obige ist der detaillierte Inhalt vonAsynchroner Datei- oder Bild-Upload Ajax. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage