文件下载
来源:互联网 发布:山口智子 知乎 编辑:程序博客网 时间:2024/05/17 04:58
多个文件上传
每次动态增加一个文件上传输入框,都把它和删除按纽放置在一个单独的div中,并对删除按纽的onclick事件进行响应,使之删除删除按纽所在的div
1.upload.jsp
<script type="text/javascript">
function addfile(){
var filesDiv= document.getElementById("files");
var fileInput= document.createElement("input");
fileInput.type="file";
fileInput.name="file";
var delButton= document.createElement("input");
delButton.type="button";
delButton.value="删除";
delButton.onclick = functiondel(){ this.parentNode.parentNode.removeChild(this.parentNode);
}
var div =document.createElement("div");
div.appendChild(fileInput);
div.appendChild(delButton);
filesDiv.appendChild(div);
}
</script>
<body>
<form action="${pageContext.request.contextPath}/servlet/UploadServlet2" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"/></td>
</tr>
<tr>
<td></td>
<td><input type="button" value="添加文件 " onclick="addfile()"/></td>
</tr>
<tr>
<td></td>
<td>
<div id="files"></div>
</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="上传文件 "/></td>
</tr>
</table>
</form>
</body>
2.ListFileServlet.java
public void doGet(HttpServletRequest request, HttpServletResponseresponse) throws ServletException, IOException{
String filePath = this.getServletContext().getRealPath("/WEB-INF/upload");
Map fileMap = new HashMap();
traverse(newFile(filePath),fileMap);
request.setAttribute("fileMap", fileMap);
request.getRequestDispatcher("/listfiles.jsp").forward(request, response);
}
private void traverse(File file, Map fileMap) {
if(file.isFile()){ //如file为文件,添加到fileMap中去
String uuidName = file.getName();
String realName =uuidName.substring(uuidName.lastIndexOf("_")+1);
fileMap.put(uuidName, realName);
}else{//如file为目录,则递归调用
File[] subFiles = file.listFiles();
for(Filef:subFiles){
traverse(f,fileMap);
}
}
文件下载
3.listfiles.jsp
<c:forEach var="me"items="${filesMap}">
<c:url var="fileAddr" value="/servlet/DownloadServlet">
<c:param name="uuidName">${me.key }</c:param>
<c:param name="realName">${me.value }</c:param>
</c:url>
文件名:${me.value }<a href="${fileAddr }">下载</a><br/>
</c:forEach>
4.DownloadServlet.java
a) 从request中取出文件名等信息,注意中文字符使用的urlencoding,需要进行手动编码转换。
b) 根据文件的uuidName计算出文件的存储路径
c) 判断目标文件是否存在
d) 设置response的header中的content-disposition值为attachment;filename=realName
e) 获取输入流,并写入输出流
public void doGet(HttpServletRequest request,HttpServletResponse response)
throwsServletException, IOException {
String uuidName = request.getParameter("uuidName");
String realName = request.getParameter("realName");
//因为参数是通过url传过来的,所以需要手动进行编码转换
uuidName = newString(uuidName.getBytes("ISO8859-1"),"UTF-8");
realName = newString(realName.getBytes("ISO8859-1"),"UTF-8");
//又因为realName需要放到response的头content-disposition中去,发送到客户的资源端,
//所以需要对它调用URLEncoder的encode方法进行url编码,才可以保证客户取到正确的征文文件名。
realName = URLEncoder.encode(realName,"UTF-8");
System.out.println("uuidName="+uuidName);
File file = newFile(getFileAddr(uuidName));
if(!file.exists()){
request.setAttribute("message", "您要下载的文件不存在");
request.getRequestDispatcher("/message.jsp").forward(request, response);
}else{
response.setHeader("content-disposition", "attachment;filename="+realName);
FileInputStream fis = new FileInputStream(file);
OutputStream out =response.getOutputStream();
byte[] buffer= new byte[1024];
int len=0;
while((len=fis.read())>0){
}
}
}
private String getFileAddr(String uuidName){
int dir1 =uuidName.hashCode() & 0xf;
int dir2 =(uuidName.hashCode()>>4) & 0xf;
String fileAddr = this.getServletContext().getRealPath("/WEB-INF/upload")+"\\"+dir1+"\\"+dir2+"\\"+uuidName;
System.out.println("fileAddr="+fileAddr);
return fileAddr;
}
- 下载图片,下载文件
- 文件下载
- 文件下载
- 文件下载
- 文件下载
- 文件下载
- 文件下载
- 下载文件
- 文件下载
- 下载文件
- 文件下载
- 文件下载
- 下载文件
- 文件下载
- 下载文件
- 下载文件
- 文件下载
- 下载文件
- dw下验证表单
- BindIoCompletionCallback函数的使用
- linux 虚拟机工具的安装
- jquery常用的插件1000收集 [来自http://www.cnblogs.com/liaigang]
- /dev目录下的设备文件解析
- 文件下载
- SSRS表达式中连接符和去空格问题
- putty连接ubuntu显示中文乱码的解决方法
- 【编程语言】java--JDK1.5新特性
- GB和GiB
- uboot打补丁的方法
- 完整地翻译了一份ASIHttpRequest的文档
- LVS的三种工作模式
- oracle建表,并设主键自增