【问题标题】:Empty array when dd($request->all()) upload file via ajax laraveldd($request->all()) 通过 ajax laravel 上传文件时的空数组
【发布时间】:2021-12-11 12:14:11
【问题描述】:

首先我尝试通过 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>

我的 laravel 版本是 5.8 。流程是当用户上传附件时,它会直接存储到文件存储中,而无需点击按钮提交。但是当我尝试检索 $request->all() 它返回空数组时,我无法继续进一步的步骤。对不起,如果我的解释不清楚。

【问题讨论】:

  • dd($request-&gt;file('file')) 也是空的吗?有时它不包含在all 中。还要检查控制台是否有任何浏览器 JS 错误
  • @apokryfos 在我的控制台中没有错误。 dd($request->file('file')) 也为空
  • 为什么要使用get的方式提交表单?您应该改用post,或者在patch 的情况下,您需要附加formData _method: post 以在laravel 端获取文件

标签: javascript php ajax laravel


【解决方案1】:

您只需要在标题中设置“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>

【讨论】:

    【解决方案2】:
     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');
                }    
                });    
              }); 
    

    试试这个。

    【讨论】:

      【解决方案3】:

      是的,好吧,laravel 有时真的很痛苦,尤其是在文件上传方面。

      你可以试试这篇文章 for 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(),
      

      【讨论】:

      • 我已经尝试过基于此博客但仍然无法正常工作,我猜我只是做正常的方式而不是 ajax。谢谢你的帮助队友:))
      • 确定没问题。我只是在检查我的一个较旧的项目并发现了这一点。 “$uploadedFile = $request->file('post_video_upload');”我认为该请求还具有文件功能来检索您可能可以使用的文件。所以不要使用 $request->get('key');尝试使用 $request->file('key');
      • 我在上面的最后一条评论也是写​​在 laravel 文档中的,我刚刚检查了 laravel 5.8 和 8.0
      【解决方案4】:

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

      <form action="upload.php" method="post" enctype="multipart/form-data">
      

      【讨论】:

      • 我已经这样做了,但仍然无法工作,先生......
      猜你喜欢
      • 2020-06-06
      • 2019-01-31
      • 2020-05-23
      • 2014-11-27
      • 1970-01-01
      • 2021-05-22
      • 2020-02-15
      • 2016-07-07
      • 2023-04-10
      相关资源
      最近更新 更多