一、实现文件上传功能,首先需要两个jar包分别为common-fileupload,common-io。
1、上传前端页面代码为:
<form action="/upload" method="post" enctype="multipart/form-data">
上传文件:<input name="upload" type="file"><br>
<input type="submit" value="提交">
</form>
2、创建一个servlet用来编写后端代码:
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
String path="E:/upload";
File file=new File(path);
//如果文件不存在,则创建
if (!file.exists()){
file.mkdirs();
}
//防止上传文件中文名字乱码
req.setCharacterEncoding("utf-8");
//创建磁盘工厂
DiskFileItemFactory factory=new DiskFileItemFactory();
//创建一个文件上传解析器
ServletFileUpload upload=new ServletFileUpload(factory);
List<FileItem> fileItems= null;
try {
//使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
fileItems = upload.parseRequest(req);
} catch (FileUploadException e) {
e.printStackTrace();
}
for (FileItem fileItem:fileItems){
//如果fileitem中封装的是普通输入项的数据
if (fileItem.isFormField()){
}else {
//获取文件名字
String fileName = fileItem.getName();
//防止上传文件名字重复
String uuid= UUID.randomUUID().toString().replaceAll("-", "");
fileName=uuid+"-"+fileName;
try {
fileItem.write(new File(path,fileName));
} catch (Exception e) {
e.printStackTrace();
}
fileItem.delete();
req.setAttribute("success","上传成功");
resp.sendRedirect("/success.jsp");
}
}
}
二、实现文件下载功能:
1、文件下载前端代码:
<a href="/download">下载</a>
2、创建一个servlet用来编写后端代码:
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//文件所在的路径
String path="E:/upload/";
//文件的名字
String fileName ="学习.jpg";
// 防止中文下载文件名字乱码
String downloadFileName = URLEncoder.encode(fileName,"UTF-8");
//设置Content-Disposition
resp.addHeader("Content-Disposition", "attachment;filename=" + downloadFileName);
fileName=path+fileName;
File file=new File(fileName);
//读取文件
FileInputStream in = new FileInputStream(file);
OutputStream out = resp.getOutputStream();
int len = 0;
byte[] bytes = new byte[(int) file.length()];
//写文件
while (( len = in.read(bytes)) != -1) {
out.write(bytes,0,len);
}
in.close();
out.close();
}