ドラッグドロップファイルのアップロードソリューションにdropzone.jsを使用しています。私はすべてファイルがアップロードされた後に関数を呼び出す必要がある何かで立ち往生しています。この場合、アップロードされたファイルごとにdoSomething()が呼び出されます。0123すべてのファイルをアップロードした後、どのように関数を呼び出すことができますか?dropzone.js - すべてのファイルがアップロードされた後の処理方法
答えて
EDIT:あなたが使用できるqueuecomplete
イベントが用意されました正確にその目的のために。
前の答え:まだファイルが完了するたびにキューまたはアップロード中のファイルがある場合
Paul B.'s answer動作しますが、そうする簡単な方法は、チェックすることです。この方法は、あなたがファイル自身を追跡する必要はありません。
Dropzone.options.filedrop = {
init: function() {
this.on("complete", function (file) {
if (this.getUploadingFiles().length === 0 && this.getQueuedFiles().length === 0) {
doSomething();
}
});
}
};
これはおそらく方法です(または3つ)...しかし、あなたの目標には1つの問題があります:すべてのファイルがいつアップロードされたかをどのように知っていますか?もっと意味をなさないように言い換えると...「すべて」の意味をどうやって知っていますか?ドキュメントによると、Dropzone自体の初期化時にinit
が呼び出され、complete
イベントハンドラを設定して、アップロードされた各ファイルが完了したときに何かを実行するように設定します。しかし、ユーザーは、彼がドロップしようとしているすべてのファイルをドロップしたことをプログラムが知ることを可能にするためにどのような仕組みがありますか?あなたがバッチドロップを行うと仮定しているならば(Dropzone 2に何度でもファイルをドロップすることで)、次のコードが動作するはずです:
Dropzone.options.filedrop = {
maxFilesize: 4096,
init: function() {
var totalFiles = 0,
completeFiles = 0;
this.on("addedfile", function (file) {
totalFiles += 1;
});
this.on("removed file", function (file) {
totalFiles -= 1;
});
this.on("complete", function (file) {
completeFiles += 1;
if (completeFiles === totalFiles) {
doSomething();
}
});
}
};
基本的に、誰かがDropzoneからファイルを追加/削除したり、クロージャ変数にカウントを保持したりするたびに監視します。次に、各ファイルのダウンロードが完了したら、completeFiles
進捗カウンタvarをインクリメントして、ユーザーがDropzoneに物を置いたときにあなたが見て更新したtotalCountと今すぐ一致するかどうかを確認します。 (注意:プラグイン/ JS libにを使用していないので、これはあなたが望む結果を得るために何ができるかについての最良の推測である決して)
クール、私はあまりにもカウンターを考えたが、私はtotalFilesが既に0であるとき、別の条件を追加 –
、変数のスコープとどのくらいの時間がなど生きているだろうについて混乱しましたか、他あなたが得ることができます負の合計ファイル値。 – mcometa
this.on("totaluploadprogress", function(totalBytes, totalBytesSent){
if(totalBytes == 100) {
//all done! call func here
}
});
LOL downvoteで。このコードは100%動作しテスト済みです。はい、これは何度も呼び出され、アップロードの全体の進行状況を更新するために使用されますが、ifブロック内のステートメントは1回だけ実行されます。ファイルをアップロードしたときにカウンタを追加してインクリメントすると考えたら、そのvarをファイルの総数と比較すると、より良い結果が得られます。 –
「queuecomplete」イベントが追加されました。 Issue 317を参照してください。
私はあなたの方法が簡単なので投票しました。送信するバイトがなくてもイベントが発生することがありますので、私はわずかな修正を加えました。ファイル上の削除ボタンをクリックしたときに私のマシン上で実行しました。まだアップロードまたはキューにあるファイルのチェック中@ enyoの答えに加えて
myDropzone.on("totaluploadprogress", function(totalPercentage, totalBytesToBeSent, totalBytesSent){
if(totalPercentage >= 100 && totalBytesSent) {
// All done! Call func here
}
});
が、私もエラー状態で任意のファイルを確認するためにdropzone.jsに新しい関数を作成した(つまり、不正なファイルの種類、サイズなど)。
Dropzone.prototype.getErroredFiles = function() {
var file, _i, _len, _ref, _results;
_ref = this.files;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
file = _ref[_i];
if (file.status === Dropzone.ERROR) {
_results.push(file);
}
}
return _results;
};
ため、チェックはなる:
if (this.getUploadingFiles().length === 0 && this.getQueuedFiles().length === 0 && this.getErroredFiles().length === 0) {
doSomething();
}
は、まさにその存在のために、そののでとても簡単ですqueuecompleteを使用しています。キュー内のすべてのファイルのアップロードが完了したときに呼び出され、ドキュメントhttp://www.dropzonejs.com/
queuecomplete>を確認してください。
this.on("queuecomplete", function (file) {
alert("All files have uploaded ");
});
これは、キュー内の各ファイルに対して起動するかどうかを知っていますか?それが私が経験している行動です。 – SimonGates
dropzone 5.3の場合は、キューが空になった後に1回起動します(別名すべてのファイルがアップロードされた) –
私はそのソリューションで動作するようにしようとしていたが、それは動作しません。 しかし、後で私は関数が宣言されていないことを認識していましたので、私はdropzone.comページを見て、イベントを呼び出すための例を取ります。 最後に私のサイトで作業します。 JavaScriptをよく理解していない私のような人にとって、私はあなたに例を残す。
<script type="text/javascript" src="/js/dropzone.js"></script>
<script type="text/javascript">
// This example uses jQuery so it creates the Dropzone, only when the DOM has
// loaded.
// Disabling autoDiscover, otherwise Dropzone will try to attach twice.
Dropzone.autoDiscover = false;
// or disable for specific dropzone:
// Dropzone.options.myDropzone = false;
$(function() {
// Now that the DOM is fully loaded, create the dropzone, and setup the
// event listeners
var myDropzone = new Dropzone(".dropzone");
myDropzone.on("queuecomplete", function(file, res) {
if (myDropzone.files[0].status != Dropzone.SUCCESS) {
alert('yea baby');
} else {
alert('cry baby');
}
});
});
</script>
テスト条件を反転する必要があります:if(myDropzone.files [0] .status!= Dropzone.SUCCESS)THEN alert( '赤ちゃんを泣き'); ELSEの警告( 'ええ、赤ちゃん'); – MAXE
- 1. すべてのファイルがいつdropzone.jsにアップロードされたかを確認する
- 2. webapp2でアップロードされたファイルを処理する方法
- 3. 以前にアップロードされたファイルを処理する方法
- 4. アップロードされたファイルを処理して処理する作業者を返す
- 5. 他のすべてのイベントが処理された後にコードを実行する方法
- 6. Jqueryファイルで複数ファイルのアップロードを処理する方法
- 7. 中継されたすべてのメッセージのタイムゾーンを処理する方法
- 8. 添付ファイルをドキュメントコンテキストから取得する方法(アップロードされたファイルのリクエストを処理する)domino
- 9. アップロードしたファイルを処理するためのDrupalモジュールの作成方法は?
- 10. "クリック"のブロックが処理された後のコードの実行方法は?
- 11. 分割されたステップ処理後のファイルの削除
- 12. uploadifyで非同期ファイルのアップロードを処理する方法は?
- 13. クロスドメインiframeファイルのアップロードjsonレスポンスを処理する方法は?
- 14. JavaScriptを使用してアップロードしたファイルを処理する方法
- 15. 複数のWebサーバーマシン+ 1台のDBサーバー - アップロードされたファイルの同期を処理する方法?
- 16. dropzone.jsと投稿されたASP.NET MVCファイルがnullですか?
- 17. ファイル名の処理方法
- 18. * .h.cmakeファイルの処理方法
- 19. アーカイブされたファイルのフルテキストインデックス処理
- 20. maxrequestlengthを超えてアップロードされたファイルを処理できません
- 21. Djangoでのファイルのアップロード/処理
- 22. ExtJSクライアントサイドを使用してCSVファイルをアップロードして処理する方法
- 23. ページがロードされた後のJavascriptの処理イベント
- 24. すべてのアプリケーション/アクティビティのAndroidの処理方法が開始されました
- 25. すべてのハイパーリンクを処理MouseEnterイベントが読み込まれたLoose Flowdocumentで処理される
- 26. スプリング非同期ファイルのアップロードと処理
- 27. いつかハイブジョブが処理されて処理が中断されました
- 28. フォームが処理された後のJavascriptイベント
- 29. Nutchを使用してクロールされたページの後処理
- 30. Dropzone.js - フォルダ構造と単一のファイルをアップロードする
@Emin十分に公正な:)実際には、それは良い、b/cこれは良い解決策です。また、APIをより使いやすくします。 –
私は、キューのアップロードが完了したときに起動する 'queuecomplete'という追加イベントがあることを意味します。 – jdepypere
また、ERROR状態のファイル(ファイルの種類、サイズなど)を確認することを忘れないでください。それを確認する新しい機能については、下の私の答えを見てください。 – Brett