您好,登錄后才能下訂單哦!
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 path2=num&0xf; int path3=(num>>4)&0xf; String newPath=path+ File.separator+path2+File.separator+path3; 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如何實現文件上傳和下載功能大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。