使用Dropzone格式的POST数据不传输文件输入数据

时间:2014-04-25 20:10:48

标签: javascript forms dropzone.js

这是this question的延续,在对那里提出的建议取得一些进展之后。

我有一个Typo3表格,大约有这个标记:

<form enctype="multipart/form-data" method="post" name="form" id="general" action="index.php?id=328">


    <ul class="inline-textbox">
      <li>

          <input type="text" id="first_name" name="tx_applicationformgeneral[form][name]" value="" placeholder="Name *">
      </li>
    </ul>



    <div class="dropzone-previews">

    </div>



 <input class="button" type="submit" name="tx_applicationformgeneral[mySubmit]" value="Submit">

 </form>

提交表单时,如果没有上传文件,则POST数据包含此代码段:

  ------WebKitFormBoundarySq0AkJrSAe1kmAOu
  Content-Disposition: form-data; name="tx_applicationformgeneral[form][files][]";      filename=""
  Content-Type: application/octet-stream

这是上传文件时的POST数据:

 ------WebKitFormBoundaryrEmFA8jYcHY56WAB
 Content-Disposition: form-data; name="tx_applicationformgeneral[form][files][]";      filename="DSC01413_01.JPG"
 Content-Type: image/jpeg

我通过向表单元素添加类dropzone并传递这些初始化选项,将表单转换为Dropzone:

 Dropzone.options.general = {
                paramName: "tx_applicationformgeneral[form][files][]", // The name that will be used to transfer the file
                autoProcessQueue: false,
                uploadMultiple: true,
                parallelUploads: 100,
                maxFiles: 100,
                addRemoveLinks: true,

                // The setting up of the dropzone
                init: function() {
                    var myDropzone = this;

                    console.log("Dropzone init");

                    // First change the button to actually tell Dropzone to process the queue.
                    this.element.querySelector("button[type=submit]").addEventListener("click", function(e) {
                        // Make sure that the form isn't actually being sent.
                        e.preventDefault();
                        e.stopPropagation();
                        myDropzone.processQueue();
                    });



                }
            };

这似乎可以初始化Dropzone:我可以将文件拖放到表单上,并显示预览。但是当我点击“提交”时,根本没有发送文件上传字段数据。 POST标题中没有任何内容标题为“tx_applicationformgeneral [form] [files] []”或任何变体。尽管所有其他字段都包含在内,但POST数据完全没有。如果我将paramName重命名为

,情况仍然如此
  paramName: "tx_applicationformgeneral[form][files]"

因为文件上传没有收到任何内容,所以至少需要一个空字段时,我会在后端遇到一个很难看的Typo3错误而且没有任何处理过。

我猜Dropzone将此字段插入POST数据时出现问题。我原以为如果问题是paramName是错误的,那么数据将在POST数据中以不正确的名称显示,我仍然会看到后端错误。相反,根本没有文件上传数据。

任何人都可以建议可能发生的事情吗?


更新

抓住了我的一个错误:当我的表单使用输入[type =“submit”]时,我的目标是按钮[type =“submit”]。尚未修复,但已经发展到新的&amp;有趣的失败。

1 个答案:

答案 0 :(得分:0)

因为我使用了错误的选择器来提交按钮,所以没有触发Dropzone队列处理。我的目标是按钮[type =“submit”],当我的表单使用输入[type =“submit”]时。