最近做了一个网站,有关检索的一个系统,里边涉及到了文件的下载和查看(pdf文件),遇到了一些问题,现在和大家分享一下我解决的办法:
文件下载总的来说有两种方式(我认为的啊,别当真),
一种是通过超链接的方式:<a href="<%=basePath%>/download/文件名称">下载</a> 这种方式就可以下载根路径下的download下的文件了,
但是这种下载只能下载 .rar文件,当下载pdf或者图片的时候,他就不打开那个文件,所以这种方式一般用于实现查看全文或者预览全文的功能。
第二种就是使用后台代码的方式了,这种方式首先要请求到后台,我就以ssh框架为例,演示一下:
首先是页面上的代码,我就用了一个超链接
<a href="download!downloadFile.action?fileName=要下载的文件名">下载</a>
之后是后台代码
public String downloadFile() {
String fileName = ServletActionContext.getRequest().getParameter("fileName"); //获取前台传过来的文件名
HttpServletRequest request = ServletActionContext.getRequest(); //获取request对象
HttpServletResponse response=ServletActionContext.getResponse(); //获取response对象
response.setHeader("Content-Disposition", "attachment;filename="+fileName); //
String fullFileName=request.getSession().getServletContext().getRealPath("") +"\\download\\"+fileName;
try{
InputStream in = new FileInputStream(fullFileName);
OutputStream out = response.getOutputStream();
//写文件
int b;
while((b=in.read())!= -1)
{
out.write(b);
}
in.close();
out.close();
}
catch(Exception e){
}
return "rdate"; //
}
这样就可以实现文件的下载了(可以下载根路径下的download下的文件了),在Windows里完全没问题(我亲自试过的)
------------------------------------------------------------------------------------------------------------------------------------------------
之后我就开开心心的把这个项目部署到服务器上去了测试了(Linux系统),那么问题来了,在服务器上的项目居然不能下载,郁闷了,之后开始寻找解决办法,
最后发现问题了,原来Linux系统的目录是xxx/xxx/xxx的格式 而Windows下是xxx\xxx\xxx的格式,所以要部署到Linux系统下这个程序还得修改一下,把
String fullFileName=request.getSession().getServletContext().getRealPath("") +"\\download\\"+fileName;这句话的 \\ 换成/ 就可以了
String fullFileName=request.getSession().getServletContext().getRealPath("") +"/download/"+fileName;
好了,完成了,有什么不对的地方欢迎大家指出来,大家一起学习
也可加本人qq:212966054