Я пытаюсь использовать 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>
Когда я вручную выбираю файл с помощью кнопки ввода файла, я получаю такой результат:
Array ( [file] => Array ( [name] => test.txt [type] => text/plain [tmp_name] => C:\wamp\tmp\php4DFF.tmp [error] => 0 [size] => 247 ) )
Однако когда я использую drag-and-drop в dropzone, файл отображается как загруженный, но после отправки я получаю следующее:
Array ( [file] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) )
Также известен как UPLOAD_ERR_NO_FILE Значение: 4; Файл не был загружен.
Я что-то здесь упускаю?
Я пытался играть с настройками, как autoProcessQueue: false, автообнаружение: ложь, автоматическая отправка форм, разные скрипты, разные серверы (apache / nginx), но мне кажется, что абсолютно ничего не работает. Должна быть какая-то глупость, которую я сейчас наблюдаю.
Я использую dropzone.js v4.0.1, но я пробовал и более старые версии.
Вы не должны отправлять (нажимая кнопку отправки) с зоной удаления, она работает асинхронно, поэтому, как только вы добавляете файл, он запускает скрипт загрузки php без необходимости делать что-либо еще.
После того, как вы нажмете «Отправить», это будет во второй раз, вы повторно отправите форму, и она будет отображаться пустой.
Вы, вероятно, также должны размещать свой php на отдельной странице, вместо того, чтобы отправлять его самому себе. Вы не сможете просматривать это сообщение в браузере после его отправки, потому что это ajax и async, но вы можете использовать инструменты разработчика Chrome, чтобы хотя бы просмотреть сообщение.
Других решений пока нет …