apache fileupload FileItemは常に空ですか?

2513 ワード

org.apache.commons.fileuploadコンポーネントを使用する場合、バックグラウンドのFileItemは常に空です.methodをPOSTに設定しても
enctype="multipart/form-data"

送信方法は次のとおりです.
	document.frmUpload.action = imgUrl + params;
	document.frmUpload.submit();
ページコードもよくチェックしました
                <form name="frmUpload" method="POST" enctype="multipart/form-data">
                      :<input  type="file" id="fileImgSample" name="fileImgSample" ><br>
                </form>    

バックグラウンドにも応答があり、
ServletFileUpload.isMultipartContent(req);
Trueにも戻ります.つまりMultipartContentですが、なぜFileItemが空なのでしょうか.
ここではstrutsもfilterも使っていませんが、いったい何が原因なのでしょうか.簡単なページテストで実行でき、やっと問題の原因を発見しました.
<form method="POST" enctype="multipart/form-data" action="http://localhost:9080/MyWeb/tempMgrServlet?action=uploadImgSample">
    <p><input type="file" name="F1" size="20"><input type="submit" value="  " name="B1"><input type="reset" value="  " name="B2"></p>
</form>

一般的にform submit()の後、ページは指定されたページにジャンプしますが、ここではどういうわけかページは終始ジャンプしていませんが、バックグラウンドは応答を受信しています.今のAJAXが横行している時代には、確かにこの問題を無視しがちです.
解決方法:
iframeに参加する
<iframe name="ifrmSubmit" id="ifrmSubmit" onload="onUploadReturn();" width="0" height="0"></iframe>	
//            
function onUploadReturn(){
    var ifrmSubmit = document.getElementById('ifrmSubmit');
    
    if("complete" == ifrmSubmit.readyState){
        var msg = ifrmSubmit.contentWindow.document.body.innerHTML;
        
        if(msg != ""){
            alert('    :' + msg);
            
            //$('#w2').window('close');            
        }    
    }
}

formのtargetをiframeに指します.すなわち、次のようにします.
                <form name="frmUpload" method="POST" enctype="multipart/form-data" target="ifrmSubmit">
                      :<input  type="file" id="fileImgSample" name="fileImgSample" ><br>
                </form> 

この問題が解決する.