上传jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<div style="width: 500px;margin: 0px auto;">
<h3 style="text-align: center;">文件上传演示</h3>
<form method="POST" enctype="multipart/form-data" action="/ch25/upload.do">
选择文件: <input type="file" name="upfile"><br/>
文件说明:<input type="text" name="note">
<input type="submit" value="文件上传">
</form>
</div>
</body>
</html>
上传文件servlet
public class FileUploadServlet extends HttpServlet {
privatestaticfinallongserialVersionUID = 1L;
protectedvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
//1、检查是否是做文件上传的功能
if(!ServletFileUpload.isMultipartContent(request)){
//提示用户不能采用该内容类型进行文件的上传
response.getWriter().print("表单内容的格式不正确,不能做文件上传");
return;
}else{
try {
DiskFileItemFactory factory=new DiskFileItemFactory();
//设置内存临界值 - 超过后将产生临时文件并存储于临时目录中
factory.setSizeThreshold(1024*1024*3);
//设置临时文件夹
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
//围绕ServletFileUpload对象来编码
ServletFileUpload upload=new ServletFileUpload(factory);
//设置上传文件的最大值
upload.setFileSizeMax(1024* 1024*40);
//设置上传内容的的最大值,包括上传的文件(上传域)和普通表单域
upload.setSizeMax(1024*1024*50);
//设置中文的处理
upload.setHeaderEncoding("UTF-8");
//所有表单中的元素input type text/password/checkbox等都会在后台被封装成一个一个的FileItem
List<FileItem>list=upload.parseRequest(request);
//将所有的list项进行迭代循环
Iterator<FileItem>ir=list.iterator();
while(ir.hasNext()){
//循环获得每个FileItem
FileItem item=ir.next();
//判断每个FileItem是普通的表单元素还是上传的文件域元素
if(item.isFormField()){//普通表单域元素
String note=item.getString();
System.out.println("普通表单元素的值:"+note);
}else{//上传文件域元素
//获得上传的文件名
String filename=item.getName();
//此时上传需要要到服务器的文件夹的地址
String filePath=getServletContext().getRealPath("/")+"upload";
//创建上传文件夹
File file=new File(filePath);
if(!file.exists()){
file.mkdirs();
}
//创建输入流和输出流
File uploadFile=new File(file, filename);
InputStream is=item.getInputStream();
OutputStream os=new FileOutputStream(uploadFile);
//边读边写
byte[] buffer=newbyte[1024];
intlen=-1;
while(-1!=(len=is.read(buffer, 0, buffer.length))){
os.write(buffer, 0, len);
os.flush();
}
os.close();
is.close();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
}
protectedvoid doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
下载jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/ch25/download.do?filename=${sessionScope.filename}">下载${sessionScope.filename}</a>
</body>
</html>
下载文件servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
//1、获得下载的文件名
String filename=request.getParameter("filename");
//2、获得要下载的文件对象
String filePath=getServletContext().getRealPath("/")+"upload/"+filename;
response.setHeader("content-disposition", "attachment;filename=" + URLDecoder.decode(filename));
//3、创建File对象
File file=new File(filePath);
//边读边写
InputStream is=new FileInputStream(file);
OutputStream os=response.getOutputStream();
//边读边写
byte[] buffer=newbyte[1024];
intlen=-1;
while(-1!=(len=is.read(buffer, 0, buffer.length))){
os.write(buffer, 0, len);
os.flush();
}
os.close();
is.close();
}
评论区