1、需要导入的文件:在WebRoot下新建文件夹common
(1)需要导入的jstl标签:tag.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
(2)需要引入jQuery easyui的js文件:jquery.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'jquery.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!-- 引入jquery easyui的css样式 -->
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/themes/default/easyui.css">
<link rel="stylesheet" type="text/css"
href="${pageContext.request.contextPath}/themes/icon.css">
<!-- 引入jQuery easyui的js文件 并且引入了jquery.js文件 -->
<script type="text/javascript"
src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/js/jquery.easyui.min.js"></script>
</head>
<body>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <servlet-name>UploadServlet</servlet-name> <servlet-class>servlet.UploadServlet</servlet-class> </servlet> <servlet> <servlet-name>DownFileServlet</servlet-name> <servlet-class>down.DownFileServlet</servlet-class> </servlet> <servlet> <servlet-name>ListFileServlet</servlet-name> <servlet-class>down.ListFileServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadServlet</servlet-name> <url-pattern>/uploadFile.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>DownFileServlet</servlet-name> <url-pattern>/downfile.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ListFileServlet</servlet-name> <url-pattern>/listFile.do</url-pattern> </servlet-mapping> </web-app>
UploadServlet.java
package servlet;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
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.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory();
ServletFileUpload fileUpload=new ServletFileUpload(diskFileItemFactory);
//判断上传的类型
if(fileUpload.isMultipartContent(request)){
//设置大小
fileUpload.setFileSizeMax(1024*1024*20);//1M
//设置编码
fileUpload.setHeaderEncoding("UTF-8");
//滚动条的进度
fileUpload.setProgressListener(new ProgressListener() {
@Override
public void update(long pBytesRead, long pContentLength, int pItems) {
System.out.println("到现在为止"+pBytesRead+"字节已上传,总大小为"+pContentLength+"----"+pItems);
}
});
try {
List<FileItem> fileItems=fileUpload.parseRequest(request);
//fileItem 对应 upfile
for(FileItem fileItem:fileItems){
//判断是否是普通的文本
if(fileItem.isFormField()){
String name=fileItem.getFieldName();
String value=fileItem.getString();
System.out.println(name+":"+value);
}else{
//获取上传文件的名称
String fileName=fileItem.getName();
int index=fileName.lastIndexOf("\\");
if(index!=-1){
fileName=fileName.substring(index+1);
}
/*int index1=fileName.lastIndexOf(".");
String name=fileName.substring(index1);
String suffix=fileName.substring(index1);*/
//添加时间戳
fileName=System.currentTimeMillis()+"_"+fileName;
//设置保存的路径
String path=request.getServletContext().getRealPath("/WEB-INF/upload");
//创建保存的文件
File file=new File(path,fileName);
//获取请求的输入流对象
InputStream is=fileItem.getInputStream();
//输出流对象
FileOutputStream fos=new FileOutputStream(file);
//缓冲区大小
byte[] buffer=new byte[1024];
//读取长度
int len=0;
//读取 如果读取的结果为-1 证明读取完毕,否则继续读取
while((len=is.read(buffer))!=-1){
//写入文件
fos.write(buffer,0,len);
}
//关闭流的操作
fos.close();
is.close();
//删除临时文件
fileItem.delete();
}
}
request.getRequestDispatcher("/listFile.do").forward(request, response);
} catch (FileUploadException e) {
String message=e.getMessage();
if(message.contains("permitted size of")){
request.setAttribute("msg", "文件上传过大");
}
request.getRequestDispatcher("./upload.jsp").forward(request, response);
e.printStackTrace();
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
滚动条的进度
ListFileServlet.java
package down;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ListFileServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 遍历WEB—INF/upload下面的所有文件 并保存到map集合中
// 获取下载的路径
String path = request.getServletContext()
.getRealPath("/WEB-INF/upload");
// 获取下载路径的文件对象
File file = new File(path);
Map map = new HashMap();
listFile(file, map);// 把文件存储到map中
request.setAttribute("map", map);
request.getRequestDispatcher("./listfile.jsp").forward(request,
response);
}
private void listFile(File file, Map map) {
File files[] = file.listFiles();
for (File f : files) {
if (f.isFile()) {
String fileName = f.getName();
int index = fileName.indexOf("_");
if (index != -1) {
map.put(fileName, fileName.substring(index + 1));
} else {
}
} else {
listFile(f, map);
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
DownFileServlet.java
package down;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownFileServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//文件下载
//获取下载的文件名称
String fileName=request.getParameter("fileName");
//找到下载文件的具体路径
String filePath=request.getServletContext().getRealPath("/WEB-INF/upload/"+fileName);
//根据路径创建文件
File file=new File(filePath);
//设置下载的类型 告诉浏览器 ,需要以什么方式下载操作
response.setContentType("application/x-msdownload");
//下载
response.setHeader("content-disposition", "attachment;fileName="+java.net.URLEncoder.encode(fileName, "UTF-8"));
//写出的流
OutputStream os=response.getOutputStream();
//创建输入流对象
FileInputStream fis=new FileInputStream(file);
byte[] buffer=new byte[1024];
int len=0;
while((len=fis.read(buffer))!=-1){
os.write(buffer,0,len);
}
os.close();
fis.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
upload.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ include file="/common/tag.jsp"%>
<%@include file="/common/jquery.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'upload.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript">
function checkUpload(){
//$("#upfile").val();
var $upfile= $("#upfile");
if($upfile.val()==""){
return false;
}
return true;
}
</script>
</head>
<body>
<form action="${pageContext.request.contextPath}/uploadFile.do"
enctype="multipart/form-data" onsubmit="return checkUpload()"
method="post">
<table>
<tr><td colspan="2">${requestScope.msg}</td></tr>
<tr><td><input type="file" name="upload" id="upfile"></td>
</tr>
<tr>
<td ><input type="submit" value="上传"></td>
</tr>
</table>
</form>
</body>
</html>
listfile.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ include file="/common/tag.jsp"%>
<%@include file="/common/jquery.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<!-- 下载方式 以流的方式进行处理 -->
<c:forEach var="m" items="${requestScope.map}">
<c:url var="downurl" value="./downfile.do">
<c:param name="fileName">${m.key}</c:param>
</c:url>
<a href="${downurl}">${m.value}</a><br/>
</c:forEach>
</body>
</html>