簡體   English   中英

將 formData 發布到 PHP 腳本以進行文件上傳

[英]posting formData to PHP script for file upload

不知道為什么我無法將 formData 發送到我的 PHP 腳本。

我之前成功使用過相同的代碼。

這是 HTML:

<form role="form" id="uploadForm" name="uploadForm" action="index.php" enctype="multipart/form-data" method="post">
  <input type="file" id="file" name="file" />
  <button type="button" id="uploadSubmit" class="btn btn-sm btn-flat btn-primary uploadSubmit">Upload Proforma</button>
 </form>

這是 JavaScript

$('#uploadSubmit').on('click', function(e){
  e.preventDefault();

  var formData = new FormData();
  formData.append("file", document.getElementById('file').files[0]);

  $.ajax({
    url: 'api/uploadDoc.php',
    method: "POST",
    data: formData,
    contentType: false,
    cache: false,
    processData: false,
    success: function(data){
      console.log(data);
    },
    error: function(jqHHR, textStatus, errorThrown){
      console.log('fail: ' + errorThrown);
    }
  });
  return false;
});

這是 PHP uploadDoc.php 腳本:

<?php
  header('Access-Control-Allow-Origin: *');
  header('Access-Control-Allow-Methods: GET, POST');
  header("Access-Control-Allow-Headers: X-Requested-With");

  print_r($_POST); 

?>

我剛剛在 PHP 腳本中添加了頭文件,如下所示:

FormData 未將數據發布到 php 后端腳本

使用 print_r($_POST),我只在控制台中得到一個空白數組,如下所示:

Array
(
)

不知道我做錯了什么。

為什么帖子顯示一個空白數組和文件信息或formData?

如何更正此問題,以便 PHP 腳本可以檢索我正在上傳的文件?

您需要使用變量$_FILES而不是$_POST獲取文件

您可以使用is_uploaded_file確保上傳的文件。 但是,如果您想檢索文件內容,只需使用readfile如下:

if (!is_uploaded_file($_FILES['file']['tmp_name'])) {
  die("Possible file upload attack: filename '". $_FILES['file']['tmp_name'] . "'.");
}

echo "File ". $_FILES['file']['name'] ." uploaded successfully.\n";
echo "Displaying contents\n";

readfile($_FILES['file']['tmp_name']);

我在這里找到了答案:

jQuery AJAX 文件上傳 PHP

我更新了我的 onClick 事件,內容如下:

$('#uploadProformaSubmit').on('click', function(e){
  e.preventDefault();

  var file_data = $('#file').prop('files')[0];  // <-- added this
  var form_data = new FormData();                  
  form_data.append('file', file_data);

  $.ajax({
    url: 'api/uploadDoc.php',
    method: "POST",
    type: "post", // <-- added this
    data: formData,
    contentType: false,
    cache: false,
    processData: false,
    success: function(data){
      console.log(data);
    },
    error: function(jqHHR, textStatus, errorThrown){
      console.log('fail: ' + errorThrown);
    }
  });
  return false;
});

在 PHP 腳本中,我可以執行以下操作:

<?php
    if(isset($_FILES['file'])){

    $file = $_FILES['file']['tmp_name'];
    $handle = fopen($file, "r");
    $i = 0;

    echo "this is the file " . $file;
?>

現在該文件正在發布。

可能是因為該站點使用的是舊版本的 JQuery (1.8.2.min.js),但我不能確定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM