java实现下载文件(在网页页面点击及弹出下载提示)
这个功能是通过struts1.2+hibernate实现的
下面的代码是在action中写的。
public ActionForward download(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
try {
File f = new File(文件路径);
FileInputStream fin = new FileInputStream(f);
response.reset();//设置为没有缓存
response.setContentType("application/x-download;charset=GBK");
response.setHeader("Content-Disposition", "attachment;filename="+ Util.getGBK_ISO(ft.getFilename()));
/*attachment是以附件下载的形式,inline是以线上浏览的形式。当点击“保存”的时候都可以下载,当点击“打开”的时候attachment是在本地机里打开,inline是在浏览器里打开。*/
OutputStream output = response.getOutputStream();
byte[] buf = new byte[1024];
int r = 0;
while ((r = fin.read(buf, 0, buf.length)) != -1) {
output.write(buf, 0, r);
}
response.getOutputStream().flush();
response.getOutputStream().close();
return null;
} catch (Exception e) {
return mapping.findForward("error");
}
}
——————————————————————————————————————————————————————
以上的代码和我的差不多 是网上找的 , 根据以上内容可以生成下载文件 并下载
但是现在我想做的是 : 在下载内容生成后弹出一个消息窗(就是js里面alert那个样子的)写着“文件生成已经完成 请选取保存路径 并继续操作”这句话。 点击确认这个消息窗后 才露出正常的下载框 让浏览者选择打开或保存。
我一直没实现得了 之前弹出的那个消息窗 高手帮忙啊
------解决方案--------------------你的要求就是相当于显示两个对话框了。
那你就调用两次js不就可以了.
当调用第二次的时候再去调用下载的js代码
JScript code
function callDownloadServlet(filename, reqNo) {
//alert(filename);
var andOpt = '&&';
var path = '/itsr/DownloaderServlet?action=Attach' + andOpt + 'filename=' + filename + andOpt + 'requestNo=' + reqNo;
//alert(path);
OpenWindow=window.open(path, 'web', 'status=1,width=350,height=150');
//OpenWindow.setTimeout('window.close();',10);
return true;
}
------解决方案--------------------
要想实现这个功能并不难,只是有点麻烦,须要两步,分两个方法完成:
method1:File file = new File(filePath);//获取文件路径
if(if(file.exists()){//如果该文件存在,打印并调用下载文件方法
response.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
out.print("<script language='javascript'>alert('文件生成已经完成 请选取保存路径 并继续操作!');window.location.href='actionName.do?op=method2'</script>");
out.close();
}
method2:在这里处理下载文件的相关操作,filePath可以重新获取,也可以从第一个方法中传过来