1.文件上传
@WebServlet("/demo2File")
public class Demo2File extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html ;charset=utf-8");
//创建一个工厂类
DiskFileItemFactory df = new DiskFileItemFactory();
//设置一个保存文件的目录
File file = new File(this.getServletContext().getRealPath("//img"));
//判断文件是否存在
if(!file.exists()){
//创建文件夹
file.mkdirs();
}
//设置文件为临时文件目录 //当上传文件超过缓冲区大小时,启用临时文件夹进行缓存(暂存)
df.setRepository(file);
//
ServletFileUpload servletFileUpload = new ServletFileUpload(df);
//设置请求头编码
servletFileUpload.setHeaderEncoding("utf-8");
//处理req 请求 获取封装的 fileltem对象集合
List<FileItem> fileItemsList;
try {
fileItemsList = servletFileUpload.parseRequest(req);
//解析list集合
for (FileItem fileItem:fileItemsList) {
if (fileItem. isFormField()) {
resp. getWriter(). print(fileItem. getFieldName() +":" +
fileItem.getString("utf-8") + "<br>");
}else {
//文件表单字段
//获取文件名
String name = fileItem.getName();
System.out.println(name);
//文件名处理
name = name.substring(name.lastIndexOf("\\") + 1);
//文件名需要保证唯一 2中方法: 时间戳 UUID随机字符串 大小写字符串数字字符
// String uuid = UUID. randomUUID(). toString() ;
//文件路径
String filePath= file+"\\"+ name;
//文件类
File file1 = new File(filePath);
//字符串数组文件结尾
String[] str = new String[]{".exe",".bat",".mp3",".mp4"} ;
//最大文件大小2M
long maxSize= 2 * 1024 * 1024;
//判断文件的结尾 accecp方法
SuffixFileFilter suffixFileFilter = new SuffixFileFilter(str);
if (suffixFileFilter.accept(file1)){
resp.getWriter().append("非图片!!!不能上传.exe, .bat,.mp3,.mp4");
} else if (fileItem.getSize()>maxSize){
resp.getWriter().append("文件大小超出2M<br>");
}else {
InputStream inputStream = fileItem.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream(file1);
//字节数组 缓冲
byte[] buffer = new byte[1024];
//每次读写的长度
int len ;
//循环存入buffer中
while ((len=inputStream.read(buffer))>0){
fileOutputStream.write(buffer,0,len);
}
inputStream.close();
fileOutputStream.close();
}
fileItem.delete();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
2.文件上传HTML页面
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<body>
<form action="demo2File" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username" /> <br>
头像:<input type="file" name="photo" /> <br>
头像:<input type="file" name="photo" /> <br>
头像:<input type="file" name="photo" /> <br>
头像:<input type="file" name="photo" /> <br>
<input type="submit" value="上传" />
</form>
</body>
</body>
</html>
3.文件下载
@WebServlet("/fileDown")
public class fileDown extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 目标文件的路径
String filePath = this.getServletContext().getRealPath("\\img\\1.jpg");
// 创建文件对象
File file = new File(filePath);
// 输入流
FileInputStream fileInputStream = new FileInputStream(file);
// 输出流
resp.setContentType("application/x-msdownload");
resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(file.getName(),"UTF-8"));
ServletOutputStream outputStream = resp.getOutputStream();
// 缓冲数组
byte[] buffer = new byte[1024];
int len;
while ((len = fileInputStream.read(buffer)) > 0) {
outputStream.write(buffer,0,len);
}
outputStream.close();
fileInputStream.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
4.文件下载的HTML页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="fileDown">图片下载</a>
</body>
</html>