首页 > 解决方案 > Ajax 文件上传从 php 端给出未定义的索引文件

问题描述

我已经尝试了我遇到的所有东西,我确信代码中有一些我没有的东西。请我需要一些帮助。这是 html,它是一种带有一个输入的表单,应该接收文件

<div id="Posts">
       <h1 style="text-align: center;color: red;">SERVICES</h1>
      <p style="text-align: center;"><span style="color:red;">***</span> please ensure to look at the definitions of every field... <span style="color:red;">***</span></p>
     <form id="promo_imgs"  enctype="multipart/formdata">
       <h5 style="text-align: center;"> About the Services You offer</h5><hr style="width: 30%; border:0.5px dashed red;">
  <div id="imgpr" class="imgpromo" style="max-width: 40%; min-height: 60px;border:dashed 0.5px;">
            <label for="promotion" class="btn btn-primary">
              Select an Image
            </label> 
             <img  src="" alt="" width="100%" style="max-height: 250px;" id="img">
     <input type="file" name="promo0" accept=".png, .jpeg, .jpg" id="promotion" style="display:none;">
</div>
 <button class="btn btn-primary" type="submit" id="serv_upload" name="serv_upload">Upload</button>
     </form><span id="ajax">
     <!--upload an image -->
      </span>

然后这是它的 jquery 部分,它应该预览图像(有效)然后上传图像(成功返回未定义的索引文件错误)

   /* to preview before upload service images*/
$(document).on('change',"#promotion",function(){ 
  var link =URL.createObjectURL(event.target.files[0]);
    console.log(link);
  var $this=$(this);
    $("#img").slideDown("fast").attr('src',link);
 $("#serv_upload").slideDown("slow");
      }); 
/* to upload service images*/
$(document).on('click',"#serv_upload",function(e){
   e.preventDefault();
   $("#ajax").html("Uploading...");


var files = $('#promotion').val(e.target.files);
    for (var i = 0; i < files.length; i++) {
      var file = files[i]; 
      var formdata= new FormData();
   formdata.append('file',file); 
    $("#ajax").append(file.name);  
      $.ajax({
        type:"POST",
        url:"aboutinsert.php",
        data:{formdata:formdata},
        processData:false,
        contentType:false,
        cache:false,
        success: function(data){
          $("#ajax").html(data);
        }
      });
    } 
         });    

最后是php部分

 $dir="img/portfolio" ;


$file = $_FILES['file']['name'];
 $path = $dir.basename($file);
   $ext= pathinfo($path,PATHINFO_EXTENSION);
  $extensions = array("JPG","jpg","jpeg","png");
  $exts=strtolower($ext);
  if (!in_array($exts, $extensions)) {
    # code...
    echo "sorry you donot have the right file format";
  }
  elseif ($_FILES['file']['size']>2000000) {
    # code...
    echo "your file is larger than 2mb";
  }
  elseif (file_exists($path)) {
    # code...
    echo "sorry a file already exists with this name change the name and try again";
  }
  else{
    if (move_uploaded_file($_FILES['file']['tmp_name'], $path)) {
        # code...
        echo  basename($_FILES['file']['name']). "upload success";
    }
    else{
        echo "file Upload failed";
    }
  }

标签: phpjqueryhtml

解决方案


$_FILES您的 PHP 代码中的数组中似乎使用了一些随机名称。你用:

$file = $_FILES['file']['name'];

接着

 elseif ($_FILES['promo0']['size']>2000000) {

最后

if (move_uploaded_file($_FILES['image']['tmp_name'], $path)) {

它是哪一个?如果你不确定,你可以var_dump($_FILES);看看你有什么。


推荐阅读