【问题标题】:Unable to send array of uploaded files to controller in Laravel无法将上传的文件数组发送到 Laravel 中的控制器
【发布时间】:2023-04-06 21:48:02
【问题描述】:

我有一个联系表格,允许用户上传多个文件。我正在使用带有formData 的ajax 方法将所有文件发送到我的控制器。我想将所有上传的文件放到我可以处理文件的控制器中。

当我做 dd();它返回 null

刀片

<form method="POST"  enctype="multipart/form-data")}}">

       <div id="dropzoneLover"   class="dropzone"></div>

      <input type="file" class="form-control" name="documents[]" multiple/>

</form>

Javascript

    <script>
    Dropzone.autoDiscover = false;

    $("#dropzoneLover").dropzone({
        url: "{{route('form_for_car_lovers')}}",
        autoProcessQueue: false,
        uploadMultiple: true,

        init: function() {
            dzClosure = this; 

            document.getElementById("submit-all").addEventListener("click", 
        function(e) {
                e.preventDefault();
                e.stopPropagation();
                dzClosure.processQueue();
            }),

                this.on("sendingmultiple", function(data, xhr, formData) {
                    formData.append("_token", "{{ csrf_token() }}");
                    $('input[name="documents[]"]').each(function (index, member) 
                    {
                        var getDocs = $(member).val();
                        formData.append('documents[]', getDocs);
                  });

                }),

        }
    });

    
    </script>

控制器

public function myfiles()
{
        $test =  $request['documents'];
        $test1 =  $request->documents;
        $test2 =  $request->file('documents');

        dd($test,$test1,$test2); // All variables returns null
}

【问题讨论】:

  • 您如何发送这些文件 - 您的 $.ajax 请求发送所有 formData 的请求在哪里?此外,您的 Javascript 逻辑不正确 - 这不是如何抓取文件并将其附加到 formData
  • @AlwaysHelping 我正在使用 dropzone 将所有表单数据发送到控制器。我可以看到我的所有值都进入了控制器,除了这个。我刚刚更新了我的代码,请检查
  • @Dmitry Nope........
  • @AlwaysHelping 请查看我更新的 Javascrip 代码

标签: javascript php jquery laravel multipartform-data


【解决方案1】:

您只需将实际的 file 对象附加到您的 formData 中,如下所示:

jQuery(这段代码已经过测试并且可以完美运行)

Dropzone.autoDiscover = false;

$("#dropzoneLover").dropzone({
    url: "upload.php",
    previewsContainer: ".dropzone-previews",
    autoProcessQueue: false,
    uploadMultiple:true,
    init: function() {
        var myDropzone = this;
        //Click
        document.getElementById("submit-all").addEventListener("click", function(e) {
            e.preventDefault();
            e.stopPropagation();
            myDropzone.processQueue();
        });
        //On sending
        myDropzone.on("sending", function(file, xhr, formData) { 
            formData.append("_token", "{{ csrf_token() }}");
            var getDocuments = $('input[name="documents[]"]')[0].files
            $.each(getDocuments, function(index, file) {
                formData.append('documents[]', file);
            });
            //All the other formData goes below this

        });
    }
});

在你的 laravel 控制器中

var_dump($request->file('documents'))

【讨论】:

  • 完美!它的工作。,我真的很感谢你所有的努力和时间。自从过去 2 天以来,我一直被这个问题困扰,你帮我解决了这个问题。我很高兴,我很欣赏你的专业知识。很荣幸在这个平台上见到一位 Laravel Pro 开发者。上帝保佑你!
  • @Shaan 很乐意帮助兄弟。只是想知道您是否有相同的方法?
  • 我刚刚在下面粘贴了我的解决方案。请检查
  • @Shaan Nice。这样做的方式相同,但它的 JS 版本。很高兴一切正常。我知道我们必须使用这种方式。由于两个 dropzone 相互冲突,所以我想确保我先尝试使用 dropzone 本身的所有内容,然后再使用 jQuery 每个解决方案 - 无论如何。快乐编码:)
【解决方案2】:

这是另一种替代方法。

我替换了我的代码

   $('input[name="documents[]"]').each(function (index, member) 
     {
       var getDocs = $(member).val();
       formData.append('documents[]', getDocs);
    });

有了这个

 var getDocuments = document.getElementById('documents').files.length;
     for (var x = 0; x < getDocuments; x++) {
        formData.append("documents[]", 
        document.getElementById('documents').files[x]);
   }

像这样获取值数组并将其拆分到控制器中

$docs =  $request->documents;
    foreach ($docs as $doc) {
        $docname = $doc->getClientOriginalName();
        $docNames[] = $docname; // Store all Images into array
        $getuploadedImages = collect($docNames)->implode(',');

    }
  dd($getuploadedImages);

【讨论】:

    猜你喜欢
    • 2019-01-11
    • 2017-07-07
    • 2015-07-23
    • 2018-01-04
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    相关资源
    最近更新 更多