jsf 文件下载问题,急。。。。

ak47zhoujun123 2011-04-27 01:35:02
我在jsf中写了一个下载方法,当页面点击文件链接时,调用该方法,
该方法的目的是实现下载,但是这样的代码下载的文件中会多出一些代码,多出的代码是我前台页面的源码。

jsf下载方法:


public void downloadAction(ActionEvent event) {
try {
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletRequest myRequest = (HttpServletRequest)facesContext.getExternalContext().getRequest();
String id = myRequest.getParameter("attachmentId");
Attachment attachment = new Attachment();
attachment.setId(Integer.parseInt(id));
attachment = this.attachmentService.findAttachment(attachment);
String fileName=attachment.getFilePath()+File.separator+attachment.getFileName();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileName));
HttpServletResponse response=(HttpServletResponse) facesContext.getExternalContext().getResponse();
response.setHeader("Content-disposition", "attachment; filename="+java.net.URLEncoder.encode(attachment.getFileRealName(), "UTF-8") ); //不是内嵌显示(inline),而是作为附件下载
//response.setContentLength(baos.size());

ServletOutputStream sos=response.getOutputStream();
int temp =-1;
while((temp=bis.read())!=-1){
sos.write(temp);
}
sos.flush();
bis.close();
sos.close();
} catch (IOException ex) {

} catch (Exception e) {
e.printStackTrace();
}
}




例如下载的文件为a.txt 内容就只有“a”

那么实际打开页面内容会是:
a


<html>.......---这块是前台jsp页面代码部分。


请有遇到相同问题的同学给找找原因给点建议 谢谢
...全文
219 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xk1126 2011-04-27
  • 打赏
  • 举报
回复
呵呵解决了!~
血战31天 2011-04-27
  • 打赏
  • 举报
回复
其实我的代码中也应该有一句ctx.responseComplete();,我忘了复制了,时间长了,不知道原来很重要。似乎是告诉已经response完了,可以下载了
ak47zhoujun123 2011-04-27
  • 打赏
  • 举报
回复
感谢 daiqianjie 其实我的代码中添加了
ctx.responseComplete();
就OK 了 不知道这个ctx.responseComplete 完成什么操作 ,呵呵 ,回头研究下。 结贴了
血战31天 2011-04-27
  • 打赏
  • 举报
回复
看看我的下载代码
FacesContext ctx = FacesContext.getCurrentInstance();
ctx.responseComplete();
String contentType = "application/x-download;charset=utf-8";
HttpServletResponse response = (HttpServletResponse) ctx.getExternalContext().getResponse();
response.setContentType(contentType);
StringBuffer contentDisposition = new StringBuffer();
contentDisposition.append("attachment;");
contentDisposition.append("filename=\"");
contentDisposition.append(oldName);
contentDisposition.append("\"");
response.setHeader("Content-Disposition", new String(contentDisposition.toString().getBytes(System.getProperty("file.encoding")),"iso8859_1"));
ServletOutputStream out = response.getOutputStream();
byte[] bytes = new byte[0xffff];
File file = new File(fileName);
if(!file.exists())
return;
InputStream is = new FileInputStream(file);;
int b = 0;
while ((b = is.read(bytes, 0, 0xffff)) > 0)
out.write(bytes, 0, b);
is.close();
ak47zhoujun123 2011-04-27
  • 打赏
  • 举报
回复
大家帮帮忙吧
ak47zhoujun123 2011-04-27
  • 打赏
  • 举报
回复
没人关注吗? 自己顶下

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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