struts2通過FromData+ajax實現文件上傳(頁面無刷新)

今天要做一個能獲取Oracle數據庫備份文件(.dmp)來實現網頁還原Oracle數據庫


思考:

通過file標籤來獲得文件的絕對路徑,再調用RunTime的exec方法來實現批處理調用實現


遇到的問題:

通過瀏覽器獲取文件絕對路徑,只有ie可以,其他瀏覽器處於安全考慮,只能獲得文件名。


解決方案:

把file標籤中選中的文件,上傳到服務器的upload文件夾,在調用服務器的.dmp文件來實現還原數據庫操作


做到這裏就需要我們通過ajax實現文件上傳,在網上找了一下文件,可以通過FromData方法來封裝form表單中的數據

具體例子如下:


ajax的代碼:

 $("input[type='button']").click(function(){
	 var formData = new FormData($("#form")[0]);  
	  $.ajax({
         type: "POST",
         url: "${pageContext.request.contextPath}/dbbak/imp.action",
         //data:{path:$("input[type='file']").val()},
         data:formData,
         //必填
         processData: false,
        //必填
         contentType: false,
         dataType: "json",
         success: function(data){	        	  
       		alert(data.dbbak);
         }	          
	  }); 
html的代碼:

 <form id="form" enctype="multipart/form-data">
	  <div class="searchBar">
	      <table class="searchContent">
		<tbody style="text-align:right;">
			
			<tr >
			 <td>
		      <input name="file" type="file" accept=".dmp" value="請選擇文件" ></input>  
		     </td>
            <td>
            <input type="button" value="數據還原" ></input>          
            </td>
           
			</tr>
		</tbody>
	    </table>
	    </div>
	</form>


這裏就能把form表單中的file傳到後端,在運用輸入輸出流來實現上傳功能  

//由於用file獲取路徑部分瀏覽器不支持
				//目前的解決方案是把目標文件上傳到項目uploud目錄再進行執行。
				 // 設置上傳文件目錄  
				HttpServletRequest request=ServletActionContext.getRequest();					
				String uploadPath = request.getRealPath("/") + "Uploud";
				//基於myFile創建一個文件輸入流  
				
		        InputStream is;
				try {
					is = new FileInputStream(file);
		       
		        // 設置目標文件  
		        File toFile = new File(uploadPath, this.getFileFileName());  
		        toFile.createNewFile(); 
		        // 創建一個輸出流  
		        OutputStream os;
				os = new FileOutputStream(toFile);		  
		        //設置緩存  
		        byte[] buffer = new byte[1024];  		  
		        int length = 0;  		  
		        //讀取myFile文件輸出到toFile文件中  		    
					while ((length = is.read(buffer)) > 0) {  
					    os.write(buffer, 0, length);  
					}
					is.close();				     
					//關閉輸出流  		        
					os.close();
				} catch (IOException e2) {
					e2.printStackTrace();
				}
				


ps:這裏面用到的file 和 fileFileName,只需要在action中聲明變量和get set ,struts2會自動調用set方法注入內容。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章