我正在使用图像上传选项编写简单的表单。我在PHP代码中通过jQuery访问我上传的文件时遇到问题。
如何在PHP中检查上传的文件名,大小?
.HTML:
<form id="conversion_form" method="post" action="#" enctype="multipart/form-data">
<input type="text" id="prize_name" size="25" value="">
<textarea rows="8" cols="75" name="lista_losowanie" id="lista_losowanie">
<input id="file_img" type="file" name="image">
<div id="uploadPreview"></div>
</div>
<p><input id="button_draw" class="btn btn-lg btn-success" type="submit" value="Losowanie" /></p>
</form>
这是我的Ajax,发送prize_name效果很好,但是我上传的图像有问题。如何在 Ajax 中发送它并在我的 PHP 中接收?
阿贾克斯:
$('#button_draw').click(function(e) {
e.preventDefault();
var formData = new FormData();
// let's just take the first image
var file = $('#file_img')[0].files[0];
// but you also need to add the other fields to formData
var lista = $(this).closest('form').find('#lista_losowanie').val();
var prize_name = $(this).closest('form').find('#prizename').val();
formData.append('prize_img', file);
formData.append('lista', lista);
formData.append('prize_name', prize_name);
console.log(formData);
alert (formData);
$.ajax({
context: this,
url: './inc/new_draw.php',
data: formData,
type: 'POST',
success: function(response){
//odpowiedź serwera
//Trzeba sparsować zwrot
var json = JSON.parse(response);
if(json.odp == 1){
}
if(response == 2){
}
},
error: function(x,n,o){
}
});
});
.PHP:
<?php
include ("config.php");
$prize_name = mysqli_real_escape_string($con, $prize_name);
$prize_img = mysqli_real_escape_string($con, $prize_img);
//HOW I CAN GET ACCESS TO UPLOADED IMAGE? HOW I CAN CHECK FILE SIZE ETC. THIS BELOW DOESNT WORK.
$file_size = $prize_img['size'];
$file_name = $prize_img['name'];
$file_type = $prize_img['type'];
echo $file_size;
if ($prize_name == NULL) {
$problem = TRUE;
$problem_code = 1;
echo json_encode($dodano);
}
?>
Ajax 方法确实支持文件上传,但仅在较新的浏览器中。为此,您可以使用XmlHttpRequest2
对象,理想情况下,请使用包含要提交的所有数据(+图像)的FormData
对象,请参阅本文。
如果你想这样做,你可以通过HTML5 File API
获取文件,快速示例:
var formData = new FormData();
// let's just take the first image
var file = $('#fileinput').files[0];
// but you also need to add the other fields to formData
var lista = $(this).closest('form').find('#lista_losowanie').val();
var prize_name = $(this).closest('form').find('#prizename').val();
formData.append('prize_img', file);
formData.append('lista', lista);
formData.append('prize_name', prize_name);
// now you pass the formData object as data
$.ajax({
context: this,
url: './inc/new_draw.php',
data: formData,
// ....
});
如您所见,文件是一个数组 - 因此,如果您在file input field
上使用multiple select
,您可以简单地遍历该数组以获取所有选定的图像。
在 PHP 端,如果使用 FormData
,则需要使用 $_FILES
数组。请参阅此处:PHP $_FILES 数组。
从我上面的例子中,您将像这样访问数组(还添加了扩展):
$size = $_FILES['prize_img']['size']
$name = $_FILES['prize_img']['name']
$type = $_FILES['prize_img']['type']
$extension = pathinfo($name, PATHINFO_EXTENSION);
使用XHR2
您还可以做一些很酷的事情,例如跟踪上传文件的进度(进度条)。如果您需要兼容较旧的浏览器,可以使用iframes
的方法:示例。