【问题标题】:$_FILES returns empty using DropzoneJS and Symfony 1.4$_FILES 使用 DropzoneJS 和 Symfony 1.4 返回空
【发布时间】:2016-06-24 12:23:39
【问题描述】:

我在网上搜索了几篇 SO 和博客文章,但找不到有用的东西。

我正在尝试设置一个简单的 HTML 拖放表单,用户可以通过 DropzoneJS 一次上传多个文件。

HTML:

<form action='<?php echo url_for("@menu_basic_menu"); ?>' method="post" enctype="multipart/form-data" class="dropzone" id="basic_menu_dropzone"></form>

<button id="file_submit_btn" type="submit" form='basic_menu_dropzone' value="submit">SUBMIT</button>

Javascript:

jQuery(document).ready(function($) {
    Dropzone.autoDiscover = false;

    var dropzone = new Dropzone('#basic_menu_dropzone', {
        paramName: 'files',
        addRemoveLinks: true,
        uploadMultiple: true,
        autoProcessQueue: false,
    });

    $('#file_submit_btn').click(function() {
        dropzone.processQueue();
    });
});

在这里你会注意到我还设置了一个提交按钮,这样我们只在提交时开始文件的上传过程

PHP(actions.class.php的sn-p):

public function executeBasicMenu(sfWebRequest $request) {
    if ($request->isMethod('post')) {
        print_r_tree($_FILES);
    }
  }

我已经完成所有设置,以便在提交时正确触发 executeBasicMenu,但 $_FILES 总是返回一个空数组。

注意事项:

  • 如果我用常规输入 type='file' 标记替换 dropzone 表单,那么一切正常,所以我的直觉告诉我,我的 dropzone 配置在某处有问题。
  • 我已经浏览了 dropzone.js 源代码,当它即将在第 1386 行发送数据时,它看起来是正确的:xhr.send(formData), formData 为空。

非常感谢任何帮助!

【问题讨论】:

  • 问:echo url_for("@menu_basic_menu"); 是否为您提供了正确的 URL? "/file-upload" 之类的东西?
  • 是的。我也确认了这一点,因为结果动作被触发了。另外,就像我在问题中提到的那样,为普通 标签切换 dropzone 表单可以正常工作(即触发该操作,并且 $_FILE 返回一个属性数组)。

标签: javascript php upload symfony-1.4 dropzone.js


【解决方案1】:

终于发现我的错误了!

在我的代码中,我是在单击按钮时提交表单:

<button id="file_submit_btn" type="submit" form='basic_menu_dropzone' value="submit">SUBMIT</button>

但我也试图在同一个按钮单击时调用 processQueue()。 但是,表单将在发送文件之前提交,因此 PHP 端不会收到任何文件。

我还错误地实例化了我的 dropzone 实例 - 我应该包含一个 parallelUploads 字段,以便我可以一次上传多个文件。

因此,使用我的新更新代码,一切都按预期工作,我可以在 PHP 端处理我的文件!

解决方案

HTML

<form action='<?php echo url_for("@menu_basic_menu"); ?>'method="post" enctype="multipart/form-data" class="dropzone" id="basic_menu_dropzone"></form>
<button id="file_submit_btn" type="button" form='basic_menu_dropzone' value="submit">SUBMIT</button>

JS

jQuery(document).ready(function($) {
    Dropzone.autoDiscover = false;

    var dropzone = new Dropzone('#basic_menu_dropzone', {
        paramName: 'files',
        addRemoveLinks: true,
        uploadMultiple: true,
        autoProcessQueue: false,
        parallelUploads: 10
    });

    $('#file_submit_btn').click(function() {
        dropzone.processQueue();
    });
});

PHP

public function executeBasicMenu(sfWebRequest $request) {
    foreach($_FILES['files']['name'] as $index => $tmpName) {
      error_log($tmpName);
    }
}

希望这对其他人也有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 2014-10-11
    • 1970-01-01
    相关资源
    最近更新 更多