我正在尝试发送大于1mb的文件,如果我使用html表单操作发送请求,则文件大小没有问题。但是,如果我尝试在php中使用ajax发送这些文件,则如果文件大小总计1mb或更大,则会在$ _FILES中显示错误。
我的php.ini默认设置为:
php_value upload_max_filesize 2G
php_value post_max_size 2G
php_value max_input_time 300
php_value max_execution_time 300
我在这里用ajax发送数据:
let formData = new FormData();
for (let i = 0; i < fileInput.files.length; i++) {
formData.append('files[]', fileInput.files[i], fileInput.files[i].name);
}
let xhr = new XMLHttpRequest();
xhr.open('POST', '../upload.php', true);
xhr.send(formData);
在upload.php中,我只是在做
echo "<pre>";
print_r($_FILES['files']);
echo "</pre>";
如果文件1MB或更大,则会显示这种文件错误
Array
{
[name] => Array
(
[0] => image.jpg
)
[type] => Array
(
[0] =>
)
[tmp_name] => Array
(
[0] =>
)
[error] => Array
(
[0] => 3
)
[size] => Array
(
[0] => 0
)
)
答案 0 :(得分:0)
您的html表单
<form name="fileInfoForm" class="form-horizontal" id='fileInfoForm'
method="post" enctype="multipart/form-data">
<input type="file" id='file' name='file' model="ctrl.fileInfo.file"
placeholder='Choose file' />
</form>
您的ajax代码在此处将更多15 mb文件发送到php脚本
<script>
$('#form').submit(function (e) {
e.preventDefault();
var file=$("#file").val().split("\\").pop();
var form=document.getElementById('fileInfoForm');
var fd=new FormData(form);
fd.append('file',file);
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: 'your_file.php',
data: fd,
dataType: "json",
processData: false,
contentType: false,
cache: false,
success: function (data) {
}
})
});
</script>
答案 1 :(得分:0)
按钮单击事件使用id获取输入类型文件prop并生成表单数据
// On button click event
$('#upload').on('click', function() {
var file_data = $('#fileToUpload').prop('files')[0];
var form_data = new FormData();
form_data.append('file', file_data);
$.ajax({
url: 'server_file.php',
dataType: 'json',
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
beforeSend: function (){
// ...
},
success: function(response){
console.log(response);
},
error: function(response){
var response = response.responseJSON;
console.log(response);
}
});
});
在服务器上:
echo "<pre>";
print_r($_FILES);
答案 2 :(得分:0)
它是用于laravel框架的,但是ajax请求在每个地方都是相同的,我只想向您展示,一旦在表单标签中包含enctype="mulitpart/form-data"
,就可以了。然后,您也使用了类似方括号的数组。像文件name="file[]"
,然后什么也不做,我的意思是说它为您提供了所有带有数组索引的文件。在这种情况下,我不会遇到任何最大文件大小错误等问题……这只是为了您的帮助。
$(document).on('click','#hide_btn', function(e){
e.preventDefault();
var formData = new FormData(this.form);
//$.ajaxSetup({
// headers: {
// 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
// }
//});
$.ajax({
method: 'POST',
url: '{{ route("visa.store") }}',
cache: false,
contentType: false,
processData: false,
data: formData,
success: function(data){
console.log(data);
},
error: function(data){
console.log(data);
}
});
});