javaweb文件下载 部署到服务器文件下载有问题

最近做了一个网站,有关检索的一个系统,里边涉及到了文件的下载和查看(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

 

posted on 2015-03-06 17:04  gaizhongfeng  阅读(885)  评论(1编辑  收藏  举报