そのため、最近、Firefox でファイルをアップロードしようとすると、リセットされるという問題が発生しています。Chrome でこの機能をテストしたところ、完全に機能しますが、Firefox では機能しません。firebug コンソール ログを調べても、どこでリセットされるかの手がかりが得られませんでした。resumable.js JS ライブラリを使用して、PHP バックエンドでアップロードをチャンクしています。これは Chrome で 100% 機能します。
これは、resume.upload()
メソッドを呼び出すアップロード ボタンをクリックすると発生し、すぐにフレームがリセットされるため、アップロードは行われません。このメソッドが呼び出された場所にブレークポイントを追加し、それを 1 回ステップ オーバーして実行すると、問題なく動作しますが、放すとリセットされます。
JS と HTML の小さなスニペット:
<form>
<input id="showBrowse" style="margin-right:5px;" type="file">
<button id="uploadFileBTN" style="margin-left:25px" onclick='resume.upload()'>Start Upload</button>
<br>
<span style="margin-right:3px;margin-right:10px;" id="pauseOrplay"></span><img id='pauseDL' onclick='resume.pause();paused();' alt="Pause">
<span style="margin-left:23px;margin-right:10px;" id="cancelTXT"></span><img id='cancelDL' onclick='resume.cancel();cancel();' alt="Cancel">
<br>
<input type="checkbox" id="overwriteFile" onclick='overwriteIt()'>Overwrite if file already exists <br>
<input type="hidden" value="<%=view.getUID()%>" id="hiddenUID">
</form>
そして、これがJSの実装です
/**
* Resumable.js implementation
*/
$("#stitchLabel").hide();
resume = new Resumable({
target:uploadURL,
query:{rewrite: $("#overwriteFile").attr('checked')?true:false},
resumableChunkSize:1*1024*1024,
simultaneousUploads:1,
testChunks:false
});
if(!resume.support){
hidePauseAndCancel();
$("#showBrowse").hide();
$("#uploadFileBTN").hide();
alert("Sorry! The upload file feature is not supported on your browser. Please use Firefox 4+, Chrome 11+, or Safari 6+");
}
resume.assignBrowse(document.getElementById("showBrowse"));
resume.on('fileAdded',function(file){
var idFile = file.uniqueIdentifier;
$("#fileBlock").append("<li id='"+file.uniqueIdentifier+"'>"+file.fileName+" <span id='fileProgress'><b>Waiting for upload to start</b></span></li>");
$("#uploadFileBTN").attr('disabled',false);
$("#overwriteFile").attr('disabled',true);
$("#pauseDL").hide();
$("#resumeDL").hide();
$("#pauseOrplay").hide();
});
resume.on('fileSuccess',function(file, message){
alert("finished");
var name = file.fileName;
$("#fileBlock").find("#"+file.uniqueIdentifier).remove();
$("#userFiles").children().find("img#pauseDL").remove();
$("#userFiles").children().find("img#resumeDL").remove();
$("#fileBlock").children().find("#"+file.uniqueIdentifier).css('color',"#D4D4D4");
$("#fileBlock").find("#wait").show();
hidePauseAndCancel();
if(($("#fileBlock").find("#wait")).length == 0){
$("#fileBlock").append("<b id='wait'>Stitching... don't press cancel</b>");
}
});
resume.on('fileProgress', function(file){
if(resume.progress()*100>0){
$("#pauseDL").attr('src','/img/IMGS/icons/pause.png').show();
$("#pauseOrplay").html("<b>Pause</b> ");
$("#pauseOrplay").show();
$("#cancelTXT").html("<b>Cancel</b>");
}
$("#cancelDL").attr('src','/img/IMGS/icons/delete-icon.png').show();
$("#cancelTXT").html("<b>Cancel</b>");
$("#cancelTXT").show();
$("#uploadFileBTN").attr('disabled',true);
$("#fileBlock").find("#"+file.uniqueIdentifier).find("#fileProgress").html(" <b>"+Math.floor(file.progress()*100)+"%</b>").css('color','#05AD24');
$("#overwriteFile").attr('disabled',true);
});
Firebug はメッセージをまったく表示しません。FF でサポートされていないものを使用していますか? ちなみにFF v20。