今天要做一个能获取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方法注入内容。