比较直白,代码拿来你们就可以用了
1.上传jsp页面:
<%@page contentType="text/html; charset=UTF-8"%>
<%@page import="com.zp.mail.*" %>
<!DOCTYPE HTML>
<html>
<head>
<title>文件上传</title>
<script type="text/javascript">
function checkForm() {
document.getElementById("form1").action = "upload.jsp?actionType=self";
}
</script>
</head>
<%
String message = "";
String actionType = request.getParameter("actionType");
if("self".equals(actionType)){
out.print(actionType);
UpAndDown up = new UpAndDown();
out.print(up.toString());
//处理下载
//up.downLoad(request, response);
message = up.upload(request, response);
out.print("message: " + message);
}
%>
<body>
<form action="" id="form1" enctype="multipart/form-data" method="post">
<input type="hidden" value="actionType">
上传用户:<input type="text" name="username"><br />
上传文件1:<input type="file" name="file1" multiple="multiple"><br />
上传文件2:<input type="file" name="file2"><br />
<input type="submit" value="提交" οnclick="checkForm()">
</form>
</body>
</html>
2.下载的jsp页面:
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@page import="com.zp.mail.*"%>
<!DOCTYPE HTML>
<html>
<head>
<title>下载文件显示页面</title>
</head>
<%
String message = "";
UpAndDown ud = new UpAndDown();
Map<String, String> fileMap = ud.listFile();
String actionType = request.getParameter("actionType");
if("downFile".equals(actionType)){
message = ud.downLoad(request, response);
}
out.println("message: " + message);
%>
<body>
<hr>
<form action="" >
<!-- 遍历Map集合 -->
<c:forEach var="file" items="<%=fileMap%>">
<c:url value="" var="downurl">
<c:param name="fileName" value="${file.key}"></c:param>
<c:param name="actionType" value="downFile"></c:param>
</c:url>
${file.value}<a href="${downurl}">下载</a>
<br />
</c:forEach>
</form>
</body>
</html>
3.上传下载处理类:
package com.zp.mail;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UpAndDown
{
String fileName = "note.txt";
/**
* 文件上传
*
* @param request
* @param response
* @return
*/
public String upload(HttpServletRequest request,
HttpServletResponse response)
{
String message = "我是提示消息";
String savePath = "E:\\pathCache";
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
ServletFileUpload fileUpload = new ServletFileUpload(
diskFileItemFactory);
// 解决上传文件名的中文乱码
fileUpload.setHeaderEncoding("UTF-8");
String username = request.getParameter("username");
String form2name = request.getParameter("form2name");
System.out.println("username:" + username);
System.out.println("form2Name:" + form2name);
// 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
try
{
List<FileItem> list = fileUpload.parseRequest(request);
for (FileItem item : list)
{
if (item.isFormField())
{
String name = item.getFieldName();
// 解决普通输入项的数据的中文乱码问题
String value = null;
String value1 = null;
try
{
value = item.getString("UTF-8");
value1 = new String(name.getBytes("iso8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
System.out.println(name + " " + value);
System.out.println(name + " " + value1);
} else
{
// 处理上传文件
String fileName = item.getName();
System.out.println("fileName:" + fileName);
fileName = fileName.substring(fileName
.lastIndexOf(File.separator) + 1);
InputStream is = null;
FileOutputStream fos = null;
try
{
is = item.getInputStream();
fos = new FileOutputStream(savePath + "/" + fileName);
System.out.println("path: " + savePath + File.separator
+ fileName);
byte buffer[] = new byte[1024];
int length = 0;
while ((length = is.read(buffer)) > 0)
{
fos.write(buffer, 0, length);
}
is.close();
fos.close();
} catch (Exception e)
{
e.printStackTrace();
}
item.delete();
message = "文件上传成功";
}
}
} catch (FileUploadException e)
{
e.printStackTrace();
message = "文件上传失败";
}
return message;
}
/**
* 列出所有文件
*
* @return
*/
public Map<String, String> listFile()
{
Map<String, String> fileMap = new HashMap<String, String>();
String path = "E:/pathCache";
File file = new File(path);
fileList(file, fileMap);
return fileMap;
}
/**
* 递归出所有文件
*
* @param file
* @param fileMap
*/
public void fileList(File file, Map fileMap)
{
if (!file.isFile())
{
File[] files = file.listFiles();
for (File file2 : files)
{
System.out.println(file2.getName());
fileList(file2, fileMap);
}
} else
{
String realName = file.getName().substring(
file.getName().lastIndexOf("_") + 1);
fileMap.put(file.getName(), realName);
}
}
/**
* 文件下载
*
* @param request
* @param response
*/
public String downLoad(HttpServletRequest request,
HttpServletResponse response)
{
String message = "";// 返回信息
fileName = request.getParameter("fileName");
String pathRoot = "E:\\pathCache";
try
{
fileName = new String(fileName.getBytes("iso8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e1)
{
e1.printStackTrace();
}
String realname = fileName.substring(fileName.indexOf("_") + 1);
String path = findFileSavePathByFileName(fileName, pathRoot);
File file = new File(path);
// 如果文件不存在
if (!file.exists())
{
message = "您要下载的文件已经被删除了";
return message;
}
try
{
//设置响应头,控制浏览器下载该文件 判断是否请求来自IE浏览器,控制名称乱码
if(request.getHeader("User-Agent").toUpperCase().indexOf("MSIE")>0){
response.setHeader("content-disposition", "attachment;filename="+ URLEncoder.encode(realname));
}else{
response.setHeader("content-disposition", "attachment;filename="+new String(realname.getBytes("UTF-8"), "ISO-8859-1"));
}
//读取要下载的文件,保存到文件输入流
FileInputStream in = new FileInputStream(path);
//创建输出流
OutputStream os = response.getOutputStream();
//设置缓存区
int fileLengh = in.available();
byte[] bytes = new byte[fileLengh];
int len = 0;
while((len = in.read(bytes))>0){
os.write(bytes);
}
in.close();
os.close();
message = "文件下载成功";
return message;
} catch (Exception e)
{
e.printStackTrace();
message = "文件下载出错";
return message;
}
}
/**
* 通过文件名找到要下载文件路径
*
* @param fileName
* @param fileSaveRootPath
* @return
*/
public String findFileSavePathByFileName(String fileName, String pathRoot)
{
String dir = pathRoot + "\\" + fileName;
File file = new File(dir);
if (!file.exists())
{
file.mkdirs();
}
return dir;
}
@Override
public String toString()
{
return "UpAndDown [fileName=" + fileName + "]";
}
}