java实现文件的上传和下载功能

互联网 20-9-8

准备工作

(视频教程推荐: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入门教程

以上就是java实现文件的上传和下载功能的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 文件
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:如何找出整型数组中只出现一次的数字

相关资讯