【发布时间】:2020-01-01 22:31:49
【问题描述】:
我正在尝试使用 Laravel 作为服务器端代码上传带有 jQuery 和 Ajax 的表单,我的表单是:
HTML:
<form action="" method="post">
<div class="form-group">
<label for="exampleInputEmail1">Comprobante</label>
<input type="file" name="file" class="form-control" id="file" aria-describedby="emailHelp">
</div>
<div class="form-group">
<label for="exampleInputEmail1">Nombre</label>
<input type="text" name="name" class="form-control" id="name" aria-describedby="emailHelp" placeholder="Enter name">
</div>
</form>
jQuery、Ajax:
$( 'body' ).on( "submit", 'form', function() {
event.preventDefault();
var formData = new FormData();
formData.append("file", $('#file')[0].files[0]);
formData.append("name", $('#name').val());
var formData = $(this).serialize();
$.ajax({
type:'POST',
url:"{{ url('/accountability/store') }}",
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
data: formData,
success:function(html)
{
alert('stored!');
}
});
});
Laravel:
$extension = $request->file('file')->getClientOriginalExtension();
$filename = $request->rut.'_rendicion_'. date('d_m_Y_h_i_s') .'.'.$extension;
Storage::disk('dropbox')->putFileAs(
'/intranet_jisparking_archivos_web/',
$request->file('file'),
$filename
);
问题是它说
在 null 上调用成员函数 getClientOriginalExtension()
但我不明白为什么?因为我在 jQuery 中使用 $('#file')[0].files[0] 上传文件。 $request->file('file') 好像是空的,如何解决?
谢谢!
【问题讨论】:
-
您正在设置
var formData = new FormData()并添加append('file', ...),然后立即将其覆盖为var formData = $(this).serialize();。会不会是这个问题? -
不要使用
var formData = $(this).serialize(); -
尝试如下语句的执行顺序 var formData = $(this).serialize(); formData.append("file", $('#file')[0].files[0]); formData.append("name", $('#name').val());
-
@Ruchi 他们根本不需要
serialize()。下面的答案证明了正确的逻辑;new FormData(),追加然后发送。
标签: javascript php jquery ajax laravel