jQuery ajax formdata:未添加文件



尝试在下面的代码上上传文件, var_dump($_POST)表明AJAX没有设置$_POST['file']。除此之外,我没有其他错误消息,所以我不知道我在哪里出错。

var转储结果

array(1) {
["action"]=>
string(20) "uploadNewUserPicture"
}

html

<div id="userInfoUploadProfilePic">   
  <form id="userUploadProfilePicForm" method="post" enctype="multipart/form-data">
  <div class="userInfoFormTitle">UPLOAD PROFILE PICTURE</div>
  <input type="file" name="fileToUpload" id="userImg"></input>
  <br>
  <input id="submitPictureButton" type="button" value="Upload Image" name="submit">
  </form>
</div

JS

var file = $('#userImg')[0].files[0];
var formData = new FormData();
formData.append('action', 'uploadNewUserPicture');
formData.append('file', file );
$.ajax({
     url: "php/upload.php",
     type: "post",
     processData: false,
     contentType: false,
     data: formData,
     success: function(result) {
      console.log(result);
     },
    error: handleAjaxError,
   });

php

if(isset($_POST['action']) && !empty($_POST['action'])) {
  var_dump($_POST);
  $action = $_POST['action'];
  $var = $_POST['file'];
  switch($action) {
   case 'uploadNewUserPicture' : uploadNewUserPicture($var);break;
  }
};

上传文件时,您需要使用$_FILES

$ _通过HTTP Post方法提交了上传到当前脚本的项目的关联数组。此数组的结构在"邮政方法上传"部分中概述。

$fileName = $_FILES['fileToUpload']['name']; 
$fileTmpName = $_FILES['fileToUpload']['tmp_name']; 

和上传文件,在您的PHP中,您需要tmp_name和文件的name。您的uploadNewUserPicture($var)功能应具有以下参数签名

uploadNewUserPicture($tmp_name, $image_name);

最新更新