日期:2014-05-17  浏览次数:20805 次

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可以重新获取,也可以从第一个方法中传过来