servlet实现上传下载
文件上传页面三要素
- 提供form表单,method必须是post
- form表单的enctype必须是multipart/form-data
- 提供 input type=“file” 类型输入
jar包:
commons-fileupload.jar
commons-io.jar
文件上传:
主流程类:
package com.booy;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
//文件上传
@WebServlet(name = "uploadServlet",value = "/uploadServlet")
//文件注解,注解必须写,文件大小限制,不写参数默认不限制大小
@MultipartConfig(maxFileSize = 1024*1024*10,maxRequestSize = 1024*1024*100)
public class uploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//输出流
PrintWriter out = response.getWriter();
//接收文件
Collection<Part> parts = request.getParts();
//文件保存的位置
String basePath = this.getServletContext().getRealPath("/WEB-INF/upload");
File dir = new File(basePath);
//如果没有文件夹就创建
if(!dir.exists()){
dir.mkdirs();
}
if(parts!=null){
for (Part part:parts){
//通过文件名,判断是文件还是普通项,普通项没有文件名
String fileName = part.getSubmittedFileName();
if(fileName==null){
//不是文件就获取用户名
String name = part.getName();
String value = request.getParameter(name);
System.out.println(name+"-->"+value);
}else{
System.out.println("文件名是:"+fileName);
if(fileName==""){
continue;
}
//通过uuid拼接的新文件名
String newFileName = UploadUtils.createNewFileName(fileName);
//新文件夹名
String newdirname = UploadUtils.createNewPath(basePath, fileName);
//保存文件
part.write(newdirname+"/"+newFileName);
//清理缓存
part.delete();
//响应内容
out.write("<h2>上传成功:</h2>"+fileName+"<br>");
}
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
工具类:UploadUtils
文件上传用到工具类中的文件名和文件夹重新生成方法,文件下载用到了文件查询方法
package com.booy;
import java.io.File;
import java.util.HashMap;
import java.util.UUID;
//工具操作类
public class UploadUtils {
//文件重新生成文件名,通过uuid
public static String createNewFileName(String oldFilename){
//生成UUID并通过replace方法去掉“-”
String uuid = UUID.randomUUID().toString().replace("-","");
//新文件名为uuid+原文件名
String newFileName=uuid+"_"+oldFilename;