Heim > Web-Frontend > js-Tutorial > So laden Sie Dateien und Bilder asynchron mit Ajax hoch

So laden Sie Dateien und Bilder asynchron mit Ajax hoch

php中世界最好的语言
Freigeben: 2018-04-25 14:28:32
Original
1453 Leute haben es durchsucht

Dieses Mal zeige ich Ihnen, wie Sie mit Ajax Dateien und Bilder asynchron hochladen. Was sind die Vorsichtsmaßnahmen für das asynchrone Hochladen von Dateien und Bildern mit Ajax?

Hallo zusammen, in diesem Artikel möchte ich den Code für die

Datei-Upload-Funktion einer Webseite mit euch teilen. Ich hoffe, ihr könnt mir einen Hinweis geben oder mir ein paar Vorschläge machen.

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>
Nach dem Login kopieren
Nachdem die Erstellung abgeschlossen ist, müssen wir zunächst die Informationen des vom Benutzer von dieser Website hochgeladenen Bildes abrufen. 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 mit einer Ajax-Anfrage an das Backend 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
Dann danach Unsere Anfrage ist erfolgreich, das Backend muss sie entsprechend verarbeiten und die Bilder 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 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 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
Ich glaube, das haben Sie Lesen Sie diesen Artikel. Sie beherrschen die Fallmethode. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

jQuery implementiert asynchrone Aktualisierung

Wie jQuery-Probleme Anfragen erhalten und an den Server senden

Das obige ist der detaillierte Inhalt vonSo laden Sie Dateien und Bilder asynchron mit Ajax hoch. 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