javascript - 拉拉维尔 5.8 : Why $request->hasFile returns false

标签 javascript html ajax laravel

我将一个文件从 HTML 发送到我的 Controller ,并在 Controller 中 var_dump 我的文件,但返回结果为 false。

var_dump($request->hasFile('logo')

如果我用HTML来执行它,结果是真的吗?如果我使用 Ajax,结果是错误的。这是一个简单的文件输入:

<section class="section bg-img" id="section-contact" style="background-image: url({{ asset('front/img/bg-cup.jpg') }})" data-overlay="8">
        <div class="container">
            <div class="row gap-y">
                <div class="col-12 col-md-6 offset-md-3 form-section"> 
        {!! Form::open(['id'=>'confirmation','class'=>'row', 'method'=>'POST', 'enctype' => 'multipart/form-data']) !!}
                    <div class="col-12 col-md-10 bg-white px-30 py-45 rounded">
                        <p id="alert"></p>
                        <div id="form-box">
                         <div>
             <span class="btn btn-info btn-file">
       <input type="file" name="logo" id="logo"> </span>
                            </div>
                        <div class="col-md-12">

        <button class="btn btn-lg btn-block btn-primary" type="button" id="save-form">SignUp</button>
                        </div>
                       </div>
                    </div>
           {{!! Form::close() !!}
        /div>
        </div>
    </div>
</section>

这是我的 Ajax

       <script>
        $('#save-form').click(function () {
          $.easyAjax({
          url: '{{route('front.confirmation',$confirm->billing_number)}}',
          container: '.form-section',
		        enctype: 'multipart/form-data',
                type: "POST",
                data: $('#confirmation').serialize(),
                messagePosition: "inline",
                success: function (response) {
                if(response.status == 'success'){
                      $('#form-box').remove();
                    }
                   }
                })});</script>
 
这是我的 Controller :

   public function update(Request $request, $billing){

      $confirm = PaymentConfirmation::where('billing_number',$billing)->first();
    var_dump($request->hasFile('logo')); //Here is return false


      if ($request->hasFile('logo')) {
          $confirm->invoice =$request->logo->hashName();
          $request->logo->store('user-uploads/invoice');
      }
      $confirm->save();
      return Reply::success('Thank you for upload.')    }       

感谢您的提前^-^

最佳答案

来自文件输入的数据是 not serialized by the jquery .serialize() method,所以文件确实没有被发送回服务器

要上传文件,请使用 FormData()

$('#save-form').click(function() {
  $.easyAjax({
    url: '{{route('front.confirmation ',$confirm->billing_number)}}',
    container: '.form-section',
    enctype: 'multipart/form-data',
    type: "POST",
    data: new FormData($('#confirmation')),
    messagePosition: "inline",
    success: function(response) {
      if (response.status == 'success') {
        $('#form-box').remove();
      }
    }
  })
});

关于javascript - 拉拉维尔 5.8 : Why $request->hasFile returns false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58493237/

相关文章:

javascript - AJAX 调用后,新加载的 CSS 选择器对 jQuery.each() 不可用

Javascript - 更改对象数据源

javascript - 如何防止div容器被调整大小

javascript - 使用 php 和 ajax 过滤 mysql 的结果

html - 如何在div的背景图片上获取 anchor 标记?

javascript - 如何将 iFrame 的部分 URL 更改为随机字符串?

jquery - 对点击事件使用 promise 成功

javascript - 将参数从 Ember Handlebars 操作传递到 Controller

javascript - 中止 doc.save() 内的 mongooseJS 保存过程

javascript - 将 Highcharts 仪表与面积图相结合