用java的方法怎么实现文件的上传和下载
导读:关于“用java的方法怎么实现文件的上传和下载”的知识点有一些人不是很理解,对此小编给大家总结了相关内容,文中的内容简单清晰,易于学习与理解,具有一定的参考学习价值,希望能对大家有所帮助,接下来就跟随小编一起学习一下“用java的方法怎么实...
关于“用java的方法怎么实现文件的上传和下载”的知识点有一些人不是很理解,对此小编给大家总结了相关内容,文中的内容简单清晰,易于学习与理解,具有一定的参考学习价值,希望能对大家有所帮助,接下来就跟随小编一起学习一下“用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(); } ListString> allowExts=new ArrayListString> (); allowExts.add("jpg"); allowExts.add("png"); allowExts.add("gif"); //1乱码 request.setCharacterEncoding("utf-8"); response.setContentType("text/html; charset=utf-8"); //2使用getParts()获取数据 CollectionPart> 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"); HashMapString,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,HashMapString,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的方法怎么实现文件的上传和下载”已经有了进一步的了解,更多相关的问题,欢迎关注网络或到官网咨询客服。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 用java的方法怎么实现文件的上传和下载
本文地址: https://pptw.com/jishu/654195.html