準(zhǔn)備工作
(視頻教程推薦:java課程)
需要導(dǎo)入的jar包
運(yùn)行截圖
文件上傳截圖
文件下載截圖
上傳文件代碼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()獲取數(shù)據(jù) 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); //從請(qǐng)求頭中獲取文件 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創(chuàng)建新的文件名 String newFileName = UploadUtils.makeNewFileName(filename); //2創(chuàng)建新的路徑 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); } }
每個(gè)屬性表示的內(nèi)容
文件下載代碼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); } }
每個(gè)屬性表示的內(nèi)容
讀取下載文件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轉(zhuǎn)發(fā) 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); } /** * 根據(jù)原始文件名產(chǎn)生一個(gè)新的文件名 * @param filename * @return */ public static String makeNewFileName(String filename){ //UUID 統(tǒng)一唯一標(biāo)識(shí)碼 String uuid = UUID.randomUUID().toString().replace("-", "");//默認(rèn)32位的16進(jìn)制 return uuid+"_"+filename; } /** * 創(chuàng)建新的路徑 * @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); } } } } }
相關(guān)教程推薦:java入門教程