Heim >Backend-Entwicklung >PHP-Tutorial >Beispiel für die gemeinsame Nutzung einer Ajax-Implementierung der asynchronen Datei- oder Bild-Upload-Funktion

Beispiel für die gemeinsame Nutzung einer Ajax-Implementierung der asynchronen Datei- oder Bild-Upload-Funktion

小云云
小云云Original
2018-01-08 13:37:051470Durchsuche

Dieser Artikel stellt hauptsächlich die asynchrone Datei-(Bild-)Upload-Funktion von Ajax vor. Ich hoffe, dass er jedem helfen kann.

Wie wir alle wissen, verfügen die meisten großen Websites heutzutage grundsätzlich über eine Datei-Upload-Funktion. Benutzer können ihre Lieblingsbilder oder andere Dateien online speichern, damit sie bei späterer Verwendung einer Datei leicht gefunden werden können Seite Wie richte ich die Upload-Funktion 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>

Nachdem die Erstellung abgeschlossen ist, beginnen wir müssen erhalten Um die Informationen zu den Bildern zu erhalten, die von Benutzern von dieser Website hochgeladen wurden, lautet der Code 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(&#39;file&#39;,fileObj);

Die formData hier ist das Objekt, das wir speichern möchten Dateiinformationen jetzt, und dann müssen wir sie verwenden. Die Ajax-Anfrage wird an den Hintergrund gesendet:


  //创建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);
   }
   }
  }
  }
 });

Nachdem unsere Anfrage erfolgreich war, muss sie vom Hintergrund verarbeitet werden entsprechend und speichern Sie das Bild im angegebenen Ordner. Das entsprechende PHP sollte also diese Vorgänge abschließen:


<?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);
 }
?>

Auf diese Weise haben wir alle Schritte des Datei-Uploads abgeschlossen . Wenn Sie Ihre Lieblingsbilder auf die Webseite hochladen möchten, hoffe ich, dass dieser Code Ihnen helfen kann!

Anhang: Wenn Sie beim Hochladen von Dateien weitere Informationen über sich selbst angeben müssen, müssen Sie diesen Code erst hinzufügen, nachdem die Frontend-Seitenanforderung abgeschlossen ist:


//完成form表单数据的提交
 $(&#39;#btn&#39;).on(&#39;click&#39;,function(){
//  serializeArray()将form表单控件中的数据序列化成数组,数组中含有若干对象,对象包含对应控件的name和value
  var infor = $(&#39;#form&#39;).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);
  }
  });
 });

Verwandte Empfehlungen:

Detaillierte Erklärung des asynchronen Dateiladers von js

PHP-Ajax-Code zur Implementierung des asynchronen Datei-Uploads_PHP-Tutorial

Codebeispiel für die Implementierung des asynchronen Datei-Uploads über Ajax in php_php-Skills

Das obige ist der detaillierte Inhalt vonBeispiel für die gemeinsame Nutzung einer Ajax-Implementierung der asynchronen Datei- oder Bild-Upload-Funktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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