
准备工作
(视频教程推荐:java课程)
需要导入的jar包
运行截图
文件上传截图
文件下载截图
上传文件代码servlet
@WebServlet(name = "UploadServlet",value = "/upload") @MultipartConfig(maxFileSize = 1024*1024*5,maxRequestSize = 1024*1024*20) //1 添加MultipartConfig注解 public class UploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //存放文件的目录 String realPath = request.getServletContext().getRealPath("/WEB-INF/upload"); File dir=new File(realPath); if(!dir.exists()){ dir.mkdirs(); } List<String> allowExts=new ArrayList<String>(); allowExts.add("jpg"); allowExts.add("png"); allowExts.add("gif"); //1乱码 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //2使用getParts()获取数据 Collection<Part> parts = request.getParts(); //3遍历 PrintWriter out = response.getWriter(); if(parts!=null&&parts.size()>0){ for (Part part : parts) { //判断表单元素是普通字段,还是文件 String submittedFileName = part.getSubmittedFileName(); if(submittedFileName==null){//普通字段 String name = part.getName(); String value = request.getParameter(name); System.out.println(name "..." value); }else{//文件 //判断文件是否为"" if(submittedFileName.equals("")){ continue; } //System.out.println(submittedFileName); //从请求头中获取文件 String dis = part.getHeader("content-disposition"); String filename=dis.substring(dis.lastIndexOf("filename=") 10, dis.length()-1); filename=filename.substring(filename.lastIndexOf("\\\\\\\\") 1); System.out.println(filename); //获取文件名的后缀 String ext=filename.substring(filename.lastIndexOf(".") 1); if(!allowExts.contains(ext)){ out.println(filename "不符合上传文件类型要求..."); continue; } //把文件保存 //1创建新的文件名 String newFileName = UploadUtils.makeNewFileName(filename); //2创建新的路径 String newPath = UploadUtils.makeNewPath(realPath, filename); part.write(newPath File.separator newFileName); //删除part part.delete(); out.println("上传成功:" filename); } } } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }
每个属性表示的内容
文件下载代码servlet
@WebServlet(name = "DownLoadServlet",value = "/download") public class DownLoadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //乱码 request.setCharacterEncoding("utf-8"); //获取文件名 String uuidFilename = request.getParameter("filename");//d578be74fd864ac2a879d77b07f13793_backg.jpg //去掉uuid String filename=uuidFilename.substring(uuidFilename.indexOf("_") 1); //存放文件的根路径 String realPath = request.getServletContext().getRealPath("/WEB-INF/upload"); //获取真正目录 String path = UploadUtils.makeNewPath(realPath, filename); File file=new File(path File.separator uuidFilename); if(file.exists()){ response.setHeader("content-disposition", "attachment;filename=" URLEncoder.encode(filename, "utf-8")); ServletOutputStream os = response.getOutputStream(); FileInputStream fis=new FileInputStream(file); byte[] buf=new byte[1024*4]; int len=0; while((len=fis.read(buf))!=-1){ os.write(buf,0,len); } }else{ response.setContentType("text/html;charset=utf-8"); response.getWriter().write("文件不存在..."); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
每个属性表示的内容
读取下载文件servlet
@WebServlet(name = "ListFileServlet",value = "/listfile")
public class ListFileServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1读取可以被下载的文件
String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");
HashMap<String,String> map=new HashMap<>();
UploadUtils.listFile(new File(realPath),map);
//2放入域中
request.setAttribute("map", map);
//3转发
request.getRequestDispatcher("/list.jsp").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
工具类servlet
public class UploadUtils {
public static void main(String[] args) {
String s = makeNewFileName("aaa.jpg");
System.out.println(s);
}
/**
* 根据原始文件名产生一个新的文件名
* @param filename
* @return
*/
public static String makeNewFileName(String filename){
//UUID 统一唯一标识码
String uuid = UUID.randomUUID().toString().replace("-", "");//默认32位的16进制
return uuid "_" filename;
}
/**
* 创建新的路径
* @param path
* @param filename
* @return
*/
public static String makeNewPath(String path,String filename){
int num = filename.hashCode();//01101011001011011111111111 1111 0101 0101
int path1=num&0xf;
int path2=(num>>4)&0xf;
String newPath=path File.separator path1 File.separator path2;
File dir=new File(newPath);
if(!dir.exists()){
dir.mkdirs();
}
return newPath;
}
//遍历可以被下载的文件
public static void listFile(File dir,HashMap<String,String> map){
File[] files = dir.listFiles();
if(files!=null&&files.length>0){
for (File file : files) {
if(file.isDirectory()){
listFile(file, map);
}else{
//文件
String uuidFilename=file.getName();
String filename=uuidFilename.substring(uuidFilename.indexOf("_") 1);
map.put(uuidFilename,filename);
}
}
}
}
}
相关教程推荐:java入门教程
更多关于云服务器,域名注册,虚拟主机的问题,请访问三五互联官网:www.35.com


