[英]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 腳本中添加了頭文件,如下所示:
使用 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']);
我在這里找到了答案:
我更新了我的 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.