今天要做一個能獲取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>
//由於用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方法注入內容。