java文件下载,另存为对话框出不来???

njciapple 2011-05-16 06:15:47

public void downloadLocal(HttpServletResponse response, String alarmTypeName) throws FileNotFoundException{
// 下载本地文件
String fileName = alarmTypeName;
fileName += (".xls").toString();
try{
fileName = URLEncoder.encode(fileName, "UTF-8");
// 读到流中
InputStream inStream = new FileInputStream("D://alarmTotalInfo//totalInfo.xls");// 文件的存放路径
// 设置输出格式
response.reset();
response.setContentType("application/x-download");
response.setHeader("Content-Disposition", "inline;filename =" + fileName);
//response.addHeader("Content-Disposition", "attachment; filename=" + fileName);
// 循环取出流中的数据
byte[] b = new byte[1024];
int len;
try{
OutputStream out = response.getOutputStream(); // 获得输出
while ((len = inStream.read(b)) > 0){
out.write(b, 0, len);
}

out.flush();
out.close();
inStream.close();
}catch(IOException e){
e.printStackTrace();
}
}catch(Exception e){
e.printStackTrace();
}
}


代码如上:

执行过程中不报异常,文件也能找到,就是不弹出 另存为 对话框

请大家指点一下!
...全文
591 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaowenming 2011-07-26
  • 打赏
  • 举报
回复
response.setHeader("Content-Disposition", "inline;filename =" + fileName);
//response.addHeader("Content-Disposition", "attachment; filename=" + fileName);
要弹出另存为对话框,应该是你注释掉得那行代码
Spring89 2011-05-16
  • 打赏
  • 举报
回复
下载你用Ajax干嘛呢?这没必要呀。。。
Spring89 2011-05-16
  • 打赏
  • 举报
回复
action是绝对要return null的
response.setContentType("application/x-msdownload;charset=utf-8");//设置响应头
response.flushBuffer();//把数据发往客户住!

所以,这三个是必须的!如果还不行,那么你就要把Action的代码贴全一点了!
njciapple 2011-05-16
  • 打赏
  • 举报
回复
找到原因了,跟response有关,Struts提交就没问题,Ajax提交,就有问题!
njciapple 2011-05-16
  • 打赏
  • 举报
回复
实在找不出什么原因,我是用Ajax提交到Action,在Action里面调用一个方法,下载文件的,这个不一定要Struts提交吧?
hepeng_8 2011-05-16
  • 打赏
  • 举报
回复
ACtion
安心逍遥 2011-05-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liutianxiong888 的回复:]
response.setContentType("application/x-msdownload;charset=utf-8");
response.flushBuffer();
这两个你都忘了加!
如果加上,还是一样,那么建议把OutputStream换成BufferedOutputStream
BufferedOutputStream output = new BufferedOut……
[/Quote]
shine333 2011-05-16
  • 打赏
  • 举报
回复
你这个response是不是已经向客户端输出过东西了?
chengyingqi0512 2011-05-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liutianxiong888 的回复:]
response.setContentType("application/x-msdownload;charset=utf-8");
response.flushBuffer();
这两个你都忘了加!
如果加上,还是一样,那么建议把OutputStream换成BufferedOutputStream
BufferedOutputStream output = new BufferedOut……
[/Quote]
楼主,不可能吧,这个加上了就可以直接可以出来了。
我最近项目用到S2SI,保存后,action最好return null。
njciapple 2011-05-16
  • 打赏
  • 举报
回复
还是不行!
Spring89 2011-05-16
  • 打赏
  • 举报
回复
response.setContentType("application/x-msdownload;charset=utf-8");
response.flushBuffer();
这两个你都忘了加!
如果加上,还是一样,那么建议把OutputStream换成BufferedOutputStream
BufferedOutputStream output = new BufferedOutputStream(response.getOutputStream());

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧