Laravel 5.8: почему $ request-> hasFile возвращает false - PullRequest
0 голосов
/ 21 октября 2019

Я отправил файл из HTML на мой контроллер и var_dump мой файл в контроллере, но результат возврата ложный.

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>
 
и это мой контроллер:
   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.')    }       

Спасибо за продвижение ^ - ^

1 Ответ

1 голос
/ 21 октября 2019

Данные из файловых входов не сериализованы методом jquery .serialize (), , поэтому файл действительно не отправляется обратно на сервер

Для загрузки файлов используйте 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();
      }
    }
  })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...