下载案例
遍历上传目录下的所有文件显示给用户,并允许用户完成下载
ListFileServlet------listfiles.jsp------DownloadServlet.java
varinput=document.createElement("input");
input.name="file";
input.type="file";
上面三句话相当于
<input name="file"type="file"/>
ListFileServlet把指定文件夹及其子文件夹下的所有文件封装到list集合中,每个文件对应一个file文件-----存入到一个作用域范围之内
主要功能:读取某一个文件夹下的所有的文件---list对象----存入request作用域范围内
public class ListFileServlet extends HttpServlet {
//将某一个文件夹下的文件获取到,然后存入到Map类型的集合中 key(文件加了UUID之后的文件名--uuidname)-----value(每一个文件所对应的file对象)
//把Map对象存入到作用域
publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
//得到保存上传文件的文件夹
StringsavePath=this.getServletContext().getRealPath("WEB-INF/upload");
Mapmap=new HashMap();
listFiles(newFile(savePath),map);
request.setAttribute("map",map);
request.getRequestDispatcher("/listfiles.jsp").forward(request,response);
}
//通过递归方法去遍历该文件夹下的所有文件及子文件夹下的文件,把文件存入到map中
privatevoid listFiles(File file, Map map) {
//TODO Auto-generated method stub
//File[]files=file.listFiles() 创建一个file数组,把文件存储到这个数组中,用递归遍历所有文件
if(file.isFile()){//判断file是文件还是文件夹
//如果是文件
Stringuuidname=file.getName();
Stringrealname=uuidname.substring(uuidname.indexOf("_")+1);//得到真实名称,把uuid截取掉
map.put(uuidname,realname);
}else{
//如果是文件夹,迭代处理
File[]files=file.listFiles();//得到文件夹下地所有文件
for(Filef:files){
listFiles(f,map);
}
}
}
publicvoid doPost(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
doGet(request,response);
}
}
listfiles.jsp
列出所有子资源(可下载资源),将所有的文件列表显示
<h2>下载资源列表</h2>
<c:forEach items="${map}"var="me">
<c:url value="/servlet/DownloadServlet" var="fileAddr">
<c:param name="filename"value="${me.key }"></c:param>
</c:url>
文件名:${me.value} <a href="${fileAddr }">下载</a><br/>
</c:forEach>
4305

被折叠的 条评论
为什么被折叠?



