DownloadController.java
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String basePath= request.getServletContext().getRealPath("/WEB-INF/upload");
//UUID文件名
String uuidFilename= request.getParameter("filename");
//通过_拆分,UUID和源文件名称
String filename= uuidFilename.split("_")[1];
//通过工具类,使用源文件名称获得散列存储的路径,就是下载的路径
String downPath= UploadUtils.newFilePath(basePath,filename);
//设置响应头,响应的文件类型和如何处理该文件 附件下载
response.setHeader("content-disposition","attachment;filename="+ URLEncoder.encode(filename,"utf-8"));
FileInputStream is=new FileInputStream(downPath+"\\"+uuidFilename);
ServletOutputStream sos=response.getOutputStream();
byte[] buffer=new byte[1024*1024*100];
int len=0;
while ((len=is.read(buffer))!=-1){
sos.write(buffer,0,len);
}
sos.close();
is.close();
展示文件列表
fileListController.java
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//集合,map,key-UUID value-源文件名称
HashMap<String,String> fileMap=new HashMap<>();
String basePath=request.getServletContext().getRealPath("/WEB-INF/upload");
DownloadUtils.getFileList(new File(basePath),fileMap);
request.setAttribute("fileMap",fileMap);
request.getRequestDispatcher("/list.jsp").forward(request,response);
list.jsp
<table border="1">
<tr>
<th>文件名称</th>
<th>操作</th>
</tr>
<c:forEach var="entry" items="${fileMap}">
<tr>
<td>${entry.value}</td>
<td><a href="${pageContext.request.contextPath}/downLoad?filename=${entry.key}">下载</a></td>
</tr>
</c:forEach>
</table>
工具类
DownloadUtils.java
public static void getFileList(File file, HashMap<String,String> fileMap){
File[] files=file.listFiles();
for (File f : files) {
if (f.isDirectory()){
getFileList(f,fileMap);
}else {
String filename= f.getName();
int index=filename.indexOf("_");
String realName=filename.substring(index+1);
fileMap.put(filename,realName);
}
}
}