思路:
1、获取文件上传到upload文件夹下的文件名
2、将文件名处理成上传时的文件名并封装成集合给前端展示
3、前端根据提交的文件名再后台查找upload文件夹下查找并下载
代码:
/**
* 1、获取文件上传到upload文件夹下的文件名
2、将文件名处理成上传时的文件名并封装成集合给前端展示
* @param request
* @param model
* @return
*/
@RequestMapping("xiazai")
public String xiaZai(HttpServletRequest request,Model model){
// 实现思路:先获取upload目录下所有文件的文件名,再保存;跳转到down.jsp列表展示
//1. 初始化map集合Map<包含唯一标记的文件名, 简短文件名> ;
Map<String,String> fileNames = new HashMap<String,String>();
//2. 获取上传目录,及其下所有的文件的文件名
String bathPath =request.getSession().getServletContext().getRealPath("/upload");
// 目录
File file = new File(bathPath);
// 目录下,所有文件名
String list[] = file.list();
// 遍历,封装
if (list != null && list.length > 0){
for (int i=0; i<list.length; i++){
// 全名
String fileName = list[i];
// 短名
String shortName = fileName.substring(fileName.lastIndexOf("#")+1);
// 封装
fileNames.put(fileName, shortName);
}
}
System.out.println(fileNames.size());
model.addAllAttributes(fileNames);
return "xiazai";
}
/**
* 1、获取文件上传到upload文件夹下的文件名
* @param request
* @param response
* @return
*/
@RequestMapping("down")
public void zhenZhengXiaZai(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{
// 获取用户下载的文件名称(url地址后追加数据,get)
String fileName = request.getParameter("fileName");
fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");
// 先获取上传目录路径
String basePath = request.getSession().getServletContext().getRealPath("/upload");
// 获取一个文件流
InputStream in = new FileInputStream(new File(basePath,fileName));
// 如果文件名是中文,需要进行url编码
fileName = URLEncoder.encode(fileName, "UTF-8");
// 设置下载的响应头,让浏览器自动下载
response.setHeader("content-disposition", "attachment;fileName=" + fileName);
// 获取response字节流
OutputStream out = response.getOutputStream();
byte[] b = new byte[1024];
int len = -1;
while ((len = in.read(b)) != -1){
out.write(b, 0, len);
}
// 关闭
out.close();
in.close();
}