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方法注入内容。




评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值