首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >$_FILES使用DropzoneJS和Symfony 1.4返回空

$_FILES使用DropzoneJS和Symfony 1.4返回空
EN

Stack Overflow用户
提问于 2016-03-09 21:45:38
回答 1查看 595关注 0票数 4

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

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

HTML:

代码语言:javascript
运行
复制
<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:

代码语言: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的片段):

代码语言:javascript
运行
复制
public function executeBasicMenu(sfWebRequest $request) {
    if ($request->isMethod('post')) {
        print_r_tree($_FILES);
    }
  }

我已经完成了所有的设置,以便在submit上正确地触发executeBasicMenu,但是$_FILES总是返回一个空数组。

备注:

  • 如果我用一个常规的输入类型=‘file’标记来替换下拉区域表单,那么一切都会正常工作,所以我的直觉告诉我,我使用dropzone的配置是错误的。
  • 我已经遍历了dropzone.js源代码,当它即将在第1386行发送数据时,xhr.send( formData ),formData是空的。

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-11 17:59:00

终于发现了我的错误!

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

代码语言:javascript
运行
复制
<button id="file_submit_btn" type="submit" form='basic_menu_dropzone' value="submit">SUBMIT</button>

但我也试图在相同的按钮单击上调用processQueue()。但是,表单将在文件发送之前提交,这样PHP端就不会收到任何文件。

我还不正确地实例化了我的下拉区域实例-我应该包括一个parallelUploads字段,以便我可以一次上传多个文件。

因此,使用我的新更新的代码,一切正常工作,我可以得到一个处理我的文件在PHP方面!

解决方案

Html

代码语言:javascript
运行
复制
<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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
public function executeBasicMenu(sfWebRequest $request) {
    foreach($_FILES['files']['name'] as $index => $tmpName) {
      error_log($tmpName);
    }
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35903257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档