当 dd($request->all()) 通过 ajax laravel 上传文件时为空数组



首先我尝试通过ajax做文件上传,当我尝试dd($request->all())在我的控制器,它给出结果empty array

public function uploadFile(Request $request){

dd($request->all());
}

我的刀片视图与ajax

<label for="inputfile">
<a  title="Click here to upload record "><i class="fa fa-upload"></i></a>
</label>
<input id="inputfile" name="inputfile" type="file" />

<script>
$('#inputfile').on('change',function(ev){
ev.preventDefault(); 
var postData=new FormData();
postData.append('file',this.files[0]);

$.ajax({
url:'{{url('reporting/uploadFile')}}',
headers:{'X-CSRF-Token':$('meta[name=csrf_token]').attr('content')},
type:"get",
contentType:false,
data:postData,
processData:false,
dataType:'json',
success: function( data ) {
console.log(data)
},
error: function() {
alert('error');
}    });    }); 
</script>

我的最新版本是5.8。该流程是当用户上传附件时,它将直接存储到文件存储中,而无需单击提交按钮。但是,当我试图检索$request->all()它返回空数组,这是我不能继续进一步的步骤。如果我的解释不清楚,我很抱歉。

是的,好吧,laravel有时真的很麻烦,尤其是当涉及到文件上传时。

你可以在laravel 5.8上尝试这篇文章,试一试,然后告诉我它是否有效。

https://www.w3adda.com/blog/laravel-5-8-jquery-ajax-form-submit

我认为本文的主要区别在于它在ajax调用中设置数据的方式。但是,您可能需要检查整篇文章,并将其与您的代码进行比较。

$.ajax({
url: "{{ url('jquery-ajax-form-submit')}}",
method: 'post',
data: $('#contact_us').serialize(),

请确保您正确使用了表单多部分设置。这通常是在大多数情况下的问题。

<form action="upload.php" method="post" enctype="multipart/form-data">
let files = $('#inputfile');
let image = files[0].files;
let form_data = new FormData();
if (image.length > 0) {
for (let i = 0; i < image.length; i++)
form_data.append('inputfile[]', image[i]);
}

$.ajax({
url:'{{url('reporting/uploadFile')}}',
headers:{'X-CSRF-Token':$('meta[name=csrf_token]').attr('content')},
type:"get",
contentType:false,
data:form_data,
processData:false,
dataType:'json',
success: function( data ) {
console.log(data)
},
error: function() {
alert('error');
}    
});    
}); 

试试这个。

你只需要设置"Content-Type"在头。你也有pass类型get,对于文件上传必须要求post。是否有console.log(this.files[0]);

<script>
$('#inputfile').on('change',function(ev){
ev.preventDefault(); 
console.log(this.files[0]);
var postData=new FormData();
postData.append('file',this.files[0]);

$.ajax({
url:'{{url('reporting/uploadFile')}}',
headers:{
'X-CSRF-Token':$('meta[name=csrf_token]').attr('content'),
'Content-Type': undefined 
},
type:"POST",
data:postData,
success: function( data ) {
console.log(data)
},
error: function() {
alert('error');
}    });    }); 
</script>

最新更新