我正在尝试使用ajax上传文件,如下所示
这是我的HTML代码:
<form id="upload-file" enctype="multipart/form-data" role="form"
method="POST">
<input type="file" name="image" id="file-data" />
<button type="submit" class="btn btn-warning" style="margin-top:10px;">
<a style="color:#fff;font-family:sans-serif;font-size:15px;">Submit</a>
</button>
</form>
jquery代码:
$("#upload-file").on('submit', function(e){
var formURL="fileupload.php";
$('#message').html('Uploading File...');
$("#message").css("display","");
$.ajax(
{
url : formURL,
type: "POST",
data : new FormData(this),
cache: false,
processData:false,
success:function(data, textStatus, jqXHR)
{
if (data)
{
console.log(data);
var obj = JSON.parse(data);
$("#file-name span").html("");
$("#file-size span").html("");
$("#file-type span").html("");
//$("#file-error").html("");
$("#file-name span").html(obj['name']);
$("#file-size span").html(obj['size']);
$("#file-type span").html(obj['type']);
//$("#file-error").html(obj['error']);
$("#file-name").css("display","");
}
},
});
});
php代码:
<?php
require('db_connect.php');
if(isset($_FILES['image'])){
//$errors= array();
$file['name'] = $_FILES['image']['name'];
//echo $file['name'];
$file_size =$_FILES['image']['size'];
$file['size'] = $file_size/1000;
$file_tmp =$_FILES['image']['tmp_name'];
$file['type']=$_FILES['image']['type'];
$file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
$expensions= array("pdf");
if(in_array($file_ext,$expensions)=== false){
$file['error']="extension not allowed, please choose a pdf file.";
}
if($file_size > 2097152){
$file['error']='File size must be excately 2 MB';
}
if(empty($errors)==true){
move_uploaded_file($file_tmp,"fileoploaded/".$file_name);
}
else{
$file['error'] = "File could'nt be updates";
}
}
$data = json_encode($file, true);
//echo "done!";
echo $data;
?>
但是我收到了以下错误:
<b>Warning</b>: Unknown: Input variables exceeded 1000.
To increase the limit change max_input_vars in php.ini. in
<b>Unknown</b> on line <b>0</b>
在大数据的情况下,我可以将max_input_vars更改为更高的值 在哪里我可以猜测数据,但不是用户上传的文件, 有没有其他方法来解决这个问题而不改变 php.ini中的max_input_vars?
答案 0 :(得分:1)
您需要在contentType: false
参数中添加$.ajax
。
否则jquery将设置它的默认contentType(默认为application/x-www-form-urlencoded
,其中包含二进制数据,它将文件拆分为十亿个单独的部分。)