10

私の開発チェリーピーサーバーで動作するため、Webfaction 構成 (nginx プロキシがあり、私のアプリは apache2+mod_wsgi で実行されている webpy です) に関連している可能性があります。

アップロードに使用する JavaScript コードの一部を次に示します。

/* Bind drop events */
    $(this).bind({
        "dragover": function(e){
            var dt = e.originalEvent.dataTransfer;
            if(!dt) return;
            if($.browser.webkit) dt.dropEffect = 'copy';
            $(this).addClass("active");
        return false;
        },
        "dragleave": function(e){
            $(this).removeClass("active")
        },
        "dragenter": function(e){return false;},
        "drop": function(e){
            var dt = e.originalEvent.dataTransfer;
            if(!dt&&!dt.files) return;
            $(this).removeClass("active")
            var files = dt.files;
            for (var i = 0; i < files.length; i++) {
                upload(files[i]);
            }
            return false;
        }
    })

/* Upload function code cut down to the basic  */
function upload(file) {
    var xhr = new XMLHttpRequest();
    var xhr_upload = xhr.upload;
    xhr_upload.addEventListener("progress", function(e){
        if( e.lengthComputable ) {
            var p = Math.round(e.loaded * 100 / e.total );
            if(e.loaded == e.total){
              console.log( e );
            }
        }
    }, false);
    xhr_upload.addEventListener( "load", function( e ){}, false);
    xhr_upload.addEventListener( "error", function( error ) { alert("error: " + error); }, false);
    xhr.open( 'POST', url, true);
    xhr.onreadystatechange = function ( e ) {   };
    xhr.setRequestHeader("Cache-Control", "no-cache");
    xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    xhr.setRequestHeader("Content-Type", file.type);
    xhr.setRequestHeader("X-File-Name", encodeURIComponent(file.fileName));
    xhr.setRequestHeader("X-File-Size", file.fileSize);
    xhr.send(file);
}

進行中のイベントのパーセンテージ値でスパンを埋めると、Safari では 0% から 100% になり、次に 50% から 100% になり、その後アップロードが完了します。Chrome と Firefox は問題ありません。

e.loaded == e.totalコンソールログにこれが表示されるため、アップロードごとに 2 回到達します。

コンソール ログ http://img824.imageshack.us/img824/4363/screenshot20110827at101.png

最初にログに記録されたイベントの totalSize はファイルのサイズと同じですが、2 番目のイベントでは 2 倍になります。

4

2 に答える 2

1

このような問題の根底にたどり着くために、コンソールを多用しようと思います。コードのすべての主要部分に、毎回意味のあるものを表示するコンソール ステートメントを配置します。

for (var i = 0; i < files.length; i++) 
{
console.log(files[i]+", "+i);    
upload(files[i])
}; 

そして再びあなたのを挿入しますupload()

于 2011-09-15T13:05:13.810 に答える
0

同じ名前の変数と関数を持つことと関係がありますか (アップロード)? Javascript では、関数の名前を参照として使用できます。変数の名前を変更してみて、xhr.upload何かが修正されるかどうかを確認してください。

于 2011-09-03T20:57:21.527 に答える