$_FILES returns 使用 DropzoneJS 和 Symfony 1.4 清空
$_FILES returns empty using DropzoneJS and Symfony 1.4
我在网上搜索了几篇 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 的片段):
public function executeBasicMenu(sfWebRequest $request) {
if ($request->isMethod('post')) {
print_r_tree($_FILES);
}
}
我已设置好所有内容,以便在提交时正确触发 executeBasicMenu,但 $_FILES 总是 returns 一个空数组。
备注:
- 如果我用常规输入 type='file' 标记替换 dropzone 表单,那么一切正常,所以我的直觉告诉我我的 dropzone 配置在某处是错误的。
- 我已经浏览了 dropzone.js 源代码,当它要在第 1386 行发送数据时看起来是正确的:xhr.send(formData),
formData 为空。
非常感谢任何帮助!
终于找到我的错误了!
在我的代码中,我在单击按钮时提交表单:
<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);
}
}
希望这对其他人也有帮助!
我在网上搜索了几篇 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 的片段):
public function executeBasicMenu(sfWebRequest $request) {
if ($request->isMethod('post')) {
print_r_tree($_FILES);
}
}
我已设置好所有内容,以便在提交时正确触发 executeBasicMenu,但 $_FILES 总是 returns 一个空数组。
备注:
- 如果我用常规输入 type='file' 标记替换 dropzone 表单,那么一切正常,所以我的直觉告诉我我的 dropzone 配置在某处是错误的。
- 我已经浏览了 dropzone.js 源代码,当它要在第 1386 行发送数据时看起来是正确的:xhr.send(formData), formData 为空。
非常感谢任何帮助!
终于找到我的错误了!
在我的代码中,我在单击按钮时提交表单:
<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);
}
}
希望这对其他人也有帮助!