私はまったく同じ問題を抱えていましたが、元の質問を実際に解決したのは Varan Sinayee の回答だけであることがわかりました。ただし、その答えは単純化できるため、より単純なバージョンを次に示します。
手順は次のとおりです。
通常のフォームを作成します (これは dropzone によって処理されなくなったため、メソッドと enctype 引数を忘れないでください)。
class="dropzone"
(Dropzoneがそれに接続する方法です)とid="yourDropzoneName"
(オプションを変更するために使用されます)で内部にdivを配置します。
Dropzone のオプションを設定し、フォームとファイルが投稿される URL を設定し、autoProcessQueue を無効にし (ユーザーが「送信」を押したときにのみ発生するように)、複数のアップロードを許可します (必要な場合)。
送信ボタンがクリックされたときのデフォルトの動作の代わりに Dropzone を使用するように init 関数を設定します。
引き続き init 関数で、"sendingmultiple" イベント ハンドラーを使用して、ファイルと共にフォーム データを送信します。
ほら!$_POST と $_FILES で、通常のフォームと同じようにデータを取得できるようになりました (この例では、これは upload.php で行われます)。
HTML
<form action="upload.php" enctype="multipart/form-data" method="POST">
<input type="text" id ="firstname" name ="firstname" />
<input type="text" id ="lastname" name ="lastname" />
<div class="dropzone" id="myDropzone"></div>
<button type="submit" id="submit-all"> upload </button>
</form>
JS
Dropzone.options.myDropzone= {
url: 'upload.php',
autoProcessQueue: false,
uploadMultiple: true,
parallelUploads: 5,
maxFiles: 5,
maxFilesize: 1,
acceptedFiles: 'image/*',
addRemoveLinks: true,
init: function() {
dzClosure = this; // Makes sure that 'this' is understood inside the functions below.
// for Dropzone to process the queue (instead of default form behavior):
document.getElementById("submit-all").addEventListener("click", function(e) {
// Make sure that the form isn't actually being sent.
e.preventDefault();
e.stopPropagation();
dzClosure.processQueue();
});
//send all the form data along with the files:
this.on("sendingmultiple", function(data, xhr, formData) {
formData.append("firstname", jQuery("#firstname").val());
formData.append("lastname", jQuery("#lastname").val());
});
}
}