【问题标题】:Dropzone JS not passing to PHP $_FILESDropzone JS 没有传递给 PHP $_FILES
【发布时间】:2019-07-28 13:30:57
【问题描述】:

我正在使用 Dropzone JS 构建一个允许您一次上传多个图像的图像上传器:

HTML:

<div class="dropzone" id="mydroppyzone"><div class="dz-message" data-dz-message><span><i class="fas fa-images"></i> Add Photos</span></div></div>

JS:

$("#mydroppyzone").dropzone({
    url: "process_edit_event.php",
    autoProcessQueue: false,
    maxFiles: 4,
    maxFilesize: 2,
    uploadMultiple: true,
    parallelUploads: 100,
    acceptedFiles: ".jpeg,.jpg,.png",
    init: function () {

        var myDropzone = this;

        $("#editEventBtn").click(function (e) {

            var editEventFormIsValid = $('#editEventFeaturedForm').valid();

            if (editEventFormIsValid) {

                if (myDropzone.getQueuedFiles().length > 0) {   
                    e.preventDefault();
                    myDropzone.processQueue(); 
                } else {                

                }

            }               

        }); 

      myDropzone.on('success', function (file, response) {

        console.log(JSON.stringify(file.upload.filename));

        var form = document.getElementById('editEventFeaturedForm');

        $("#editEventFeaturedForm").append($('<input type="hidden" ' +
        'name="theFiles[]" ' +
        'value="' + file.upload.filename + '">'));

        form.submit();

      });
   },
   sending: function (file, xhr, formData) {
       formData.append("name", $('#name').val());
   }
});

process_edit_event.php

// Upload the event photos to the server

    $ds = DIRECTORY_SEPARATOR;

    $storeFolder = 'user_images/events';

    if (!empty($_FILES)) {

        $tempFile = $_FILES['file']['tmp_name'];         

        $targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds;

        $targetFile =  $targetPath. $_FILES['file']['name'];

        foreach($_FILES['file']['tmp_name'] as $key => $value) {
            $tempFile = $_FILES['file']['tmp_name'][$key];
            $targetFile =  $targetPath . $_FILES['file']['name'][$key];
            move_uploaded_file($tempFile,$targetFile);
        }

    }

当我在 JavaScript 端控制台记录所有内容时,图像会按原样处理,但在 PHP 端 $_FILES 始终为空。

我很难弄清楚为什么 $_FILES 是空的。 JavaScript 中是否缺少某些未传递给 PHP 的内容?感谢您的帮助!

【问题讨论】:

  • 您的upload_max_filesizepost_max_size 设置为什么?您可以在服务器上检查您的 ini 配置或快速ini_get('upload_max_filesize')
  • @jfadich 64M 它说.. 我正在测试的文件也非常小。该图像看起来在 Dropbox 端处理得很好,但它似乎永远不会进入 $_FILES。这段代码最初对我有用..然后突然停止
  • 您的 javascript 代码将文件添加到名为 theFiles 的输入中,但您的 PHP 代码正在尝试读取 $_FILES['file']。将输入的名称更改为file 或检查$_FILES['theFiles']
  • @rickdenhaan 谢谢我尝试了这两种方法,但都没有奏效。无论如何,$FILES 不会被读取为非空吗?
  • 嗯,应该的。假设您的表单将其enctype 设置为multipart/form-data。是吗?

标签: javascript php dropzone.js


【解决方案1】:

问题是表单被发送了2次,因为文件上传时,upload.php是通过ajax自动执行的。

你必须取消表单的提交,因为当我们点击它时,它已经是第二次执行了,因此没有找到任何要上传的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-12
    • 2012-05-31
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多