dropzone.js 发送空的 $_FILES

dropzone.js sends empty $_FILES

我尝试使用 dropzone.js 制作一个拖放文件上传区域,但我真的很绝望。我有这个最简单的脚本:

<?php
  print_r($_FILES);
?>

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
        <meta charset="utf-8">
    </head>
    <body>
        <form action="/" method="POST" enctype="multipart/form-data" class="dropzone">
            <input name="file" type="file" />
            <input type="submit" name="submit" value="Submit" />
        </form>
        <script type='text/javascript' src="dropzone.js"></script>
    </body>
</html>

当我使用文件输入按钮手动 select 文件时,我得到了这个结果:

Array ( [file] => Array ( [name] => test.txt [type] => text/plain [tmp_name] => C:\wamp\tmp\php4DFF.tmp [error] => 0 [size] => 247 ) )

然而,当我使用 dropzone 拖放时,文件显示为已上传,但提交后我得到这个:

Array ( [file] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) )

也称为UPLOAD_ERR_NO_FILE 值:4;没有上传文件。

我是不是遗漏了什么?

我尝试使用 autoProcessQueue: falseautoDiscover: false、自动表单提交、不同的脚本、不同的服务器( apache/nginx),但似乎对我来说绝对没有用。我现在正在监督一些愚蠢的事情。

我使用 dropzone.js v4.0.1,但我也尝试过旧版本。

您不应该使用拖放区提交(点击提交按钮),它是异步工​​作的,所以一旦您将文件拖入,它就会点击您的 php 上传脚本,而无需执行任何其他操作。 一旦你点击提交,这将是第二次,你正在重新提交表格,它会显示为空。

您可能也应该将 php 放在单独的页面上,而不是提交给自己。提交后您将无法在浏览器中查看此 post,因为它是 ajax 和异步的,但您可以使用 chrome 的开发工具查看 post 至少。

当我的文件大于 php.ini 文件中配置的最大值 (upload_max_filesize) 时,我也遇到了同样的情况。

您可能想要检查的其他设置:

  • upload_max_filesize
  • post_max_size
  • max_input_time
  • max_execution_time