每天學習一個小功能:java文件下載
思路:
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();
}
每天學習一個小功能:java文件下載