12

Valums Ajax Uploader を使用してファイルのバッチをアップロードしています。最近、コードをシングル アップロードからマルチ アップロード タイプに変更しました。これにより、コードに問題が発生しました。

ご覧のとおり、onCompleteイベントが発生すると、ページをリロードして新しくアップロードされた画像を表示します。ただし、onCompleteバッチ全体が完了した後ではなく、各ファイルが完了した後にイベントが発生しているようです。最初のファイルが終了すると、ページのリロードが試行され、アップローダーが「このページを離れると、残りのアップロードですべてが壊れてしまいます」という警告をポップアップ表示するため、問題が発生します。

イベントが完了したファイルの 0 から始まる ID を返信していることに気付きましたonCompleteが、これを使用してバッチがいつ完了したかを判断する方法が正確にはわかりません。

私の質問は、A) すべてのファイルが完了したときにトリガーされる別のイベントはありますか、または B) 完了したファイルの数をonCompleteイベントで追跡するために、ユーザーが選択したファイルの数をどのように判断するのですか?

    var uploader = new qq.FileUploader({
        multiple: true,
        element: document.getElementById('file-uploader'),
        action: '/projectPhotoUpload.php',
        allowedExtensions: ['jpg', 'png', 'gif'],
        debug: true,
        params: {id: i},
        onComplete: function(id, fileName, responseJSON){
            window.location = 'projects.php?all=true&tab=1&sel=' + currProject;                                 
        }   
    })  
4

4 に答える 4

22

アップロードが開始されると増加し、完了すると減少するカウンターを追加できます。カウンターが 0 の場合にのみ、完了時にリダイレクトします。

var running = 0;  
var uploader = new qq.FileUploader({
    multiple: true,
    element: document.getElementById('file-uploader'),
    action: '/projectPhotoUpload.php',
    allowedExtensions: ['jpg', 'png', 'gif'],
    debug: true,
    params: {id: i},
    onSubmit: function(id, fileName){
        running++;                                 
    },
    onComplete: function(id, fileName, responseJSON){
        running--;
        if(running==0){
          window.location = 'projects.php?all=true&tab=1&sel=' + currProject;                                 
        }
    }   
}) 
于 2011-01-07T18:25:16.480 に答える
4

ファイルがアップロードされたかどうかを確認するためにresponseJSONを確認したい場合は、良い答えです。サーバースクリプトに設定されています

return array('success'=>true, 'filename'=>$filename . '.' . $ext);

次に、JSのようにそれを拾うことができます

var success = responseJSON["success"]
var filename = responseJSON["filename"]

このようにして、ファイルのリストを作成し、完了時に名前を確認するか、デクリメントのみを行うことができます

if (success == true)

アップロードが失敗した場合、たとえばデクリメントしたくない場合があります

于 2011-05-19T08:08:24.610 に答える
1

ユーザーがファイルのアップロードをキャンセルした場合に備えて、キャンセル イベントを追加する必要があります。

onCancel: function(id, fileName){running--;}

ここで実装する正しいアプローチについて議論しています。また、ファイルがアップロードされたらページをリダイレクトしたいと思いますが、ユーザーがさらにファイルをアップロードする場合はどうでしょうか。ファイルは別々のディレクトリに分散している可能性があります。

最善のアプローチは、ユーザーがアップロードを完了するとリダイレクトされる「I'm Done」ボタンを使用することです。

于 2012-04-13T17:48:11.857 に答える
-1

より簡単な方法は、内部プロパティ_filesInProgressを使用して、アップロードされたすべてのファイルが処理されたかどうかを確認することです。次のようになります。

var uploader = new qq.FileUploader({
    multiple: true,
    element: document.getElementById('file-uploader'),
    action: '/projectPhotoUpload.php',
    allowedExtensions: ['jpg', 'png', 'gif'],
    debug: true,
    params: {id: i},
    onComplete: function(id, fileName, responseJSON){
        if(uploader._filesInProgress == 0){
            window.location = 'projects.php?all=true&tab=1&sel=' + currProject;
        }                                 
    }   
});
于 2013-07-04T15:54:09.907 に答える