编写一个用于处理文件下载的Servlet
base = request.getContextPath();
String fileName = request.getParameter("CFileAddress");
fileName = new String(fileName.getBytes("iso8859-1"),"UTF-8");
FileInputStream in=null;
OutputStream out=null;
//上传的文件保存的目录
//String fileSaveRootPath=this.getServletContext().getRealPath("E:/update");
String path=SingleUtil.getInstrance().getDownloadAddress();
String fileSaveRootPath=path;//"E:\\update";
//String fileSaveRootPath="/home/ports/upload";
//通过文件名找出文件的所在目录
//String path = findFileSavePathByFileName(cNeedNo,fileSaveRootPath);
//得到要下载的文件
File file = new File(fileSaveRootPath +File.separator + fileName);
System.out.println("=============>>>下载文件路径:"+file);
//如果文件不存在
if(!file.exists()){
// request.setAttribute("message", "您要下载的文件不存在!!");
// request.getRequestDispatcher("/core/welcomeShow.jsp").forward(request, response);
response.sendRedirect(base+"/core/welcomeShow.jsp?message=err");
return;
}
//处理文件名
//String realname = fileName.substring(fileName.indexOf("_")+1);
//设置响应头,控制浏览器下载该文件
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
//读取要下载的文件,保存到文件输入流
//File.separator保证跨平台的可用性 linux : / window: \
in = new FileInputStream(fileSaveRootPath +File.separator+ fileName);
//创建输出流
out = response.getOutputStream();
//创建缓冲区
byte buffer[] = new byte[1024];
int len = 0;
//循环将输入流中的内容读取到缓冲区当中
while((len=in.read(buffer))>0){
//输出缓冲区的内容到浏览器,实现文件下载
out.write(buffer, 0, len);
}
在上传时如果使用了hash算法来处理文件的时候拼接路径时需要进行处理
//根据hash算法打散存储文件
String findFileSavePathByFileName(String filename,String saveRootPath){
int hashcode = filename.hashCode();
int dir1 = hashcode&0xf; //0--15
int dir2 = (hashcode&0xf0)>>4; //0-15
String dir = saveRootPath + "\\" + dir1 + "\\" + dir2; //upload\2\3 upload\3\5
File file = new File(dir);
if(!file.exists()){
//创建目录
file.mkdirs();
}
return dir;
}
在Web.xml文件中的配置
<servlet>
<servlet-name>UpdateNateServlet</servlet-name>
<servlet-class>com.isoftstone.pcis.policy.operationNote.UpdateNateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UpdateNateServlet</servlet-name>
<url-pattern>/servlet/UpdateNate</url-pattern>
</servlet-mapping>
至此下载功能就完成了。