java递归下载文件_文件的递归和下载

1 public class UploadServlet extendsHttpServlet {2

3 public voiddoGet(HttpServletRequest request, HttpServletResponse response)4 throwsServletException, IOException {5

6 List types = Arrays.asList("jpg","gif","avi","txt");7

8 try{9 DiskFileItemFactory factory = new DiskFileItemFactory(); //10k

10 factory.setSizeThreshold(1024*1024);11 factory.setRepository(new File(this.getServletContext().getRealPath("/temp")));12

13 ServletFileUpload upload = newServletFileUpload(factory);14 upload.setProgressListener(newProgressListener(){15 public void update(long pBytesRead, long pContentLength, intpItems) {16 System.out.println("当前已解析:" +pBytesRead);17 }18 });19

20 upload.setFileSizeMax(1024*1024*5);21 if(!upload.isMultipartContent(request)){22 //按照传统方式获取表单数据

23 request.getParameter("username");24 return;25 }26 upload.setHeaderEncoding("UTF-8");27

28 //把文件解析到一个list集合

29 List list =upload.parseRequest(request);30

31 for(FileItem item : list){32 if(item.isFormField()){33 //为普通输入项

34 String inputName =item.getFieldName();35 String inputValue = item.getString("UTF-8");36 //inputValue = new String(inputValue.getBytes("iso8859-1"),"UTF-8");

37 System.out.println(inputName + "=" +inputValue);38 }else{39

40 String filename = item.getName().substring(item.getName().lastIndexOf("\\")+1); //""41

42 //判断是否为空文件,如果为空跳至下一次循环

43 if(filename==null || filename.trim().equals("")){44 continue;45 }46

47

48 //限制上传文件的类型

49 /*String ext = filename.substring(filename.lastIndexOf(".")+1);50 if(!types.contains(ext)){51 request.setAttribute("message", "本系统不支持" + ext + "这种类型");52 request.getRequestDispatcher("/message.jsp").forward(request, response);53 return;54 }*/

55 InputStream in =item.getInputStream();56 int len = 0;57 byte buffer[] = new byte[1024];58 String saveFileName =generateFileName(filename);59 String savepath = generateSavePath(this.getServletContext().getRealPath("/WEB-INF/upload"),saveFileName);60 FileOutputStream out = new FileOutputStream(savepath + File.separator +saveFileName);61 while((len=in.read(buffer))>0){62 out.write(buffer, 0, len);63 }64 in.close();65 out.close();66 item.delete(); //删除临时文件,必须删除

67 }68 }69 }catch(FileUploadBase.FileSizeLimitExceededException e) {70

71 //如果限制了上传文件的大小、必须捕捉这个异常

72 request.setAttribute("message", "文件大小不能超过5m");73 request.getRequestDispatcher("/message.jsp").forward(request, response);74 return;75 }catch(Exception e) {76 throw newRuntimeException(e);77 }78

79 //上传成功、跳转全局消息显示页面

80 request.setAttribute("message", "上传成功!!");81 request.getRequestDispatcher("/message.jsp").forward(request, response);82 }83

84

85

86 //生成目录、文件不能全部保存同一个目录、要打散保存在不同的目录

87 publicString generateSavePath(String path,String filename){88

89 //得到文件名在内存中的哈希值,在内存中是32位二进制

90 int hashcode = filename.hashCode(); //12122191

92 //低四位与上15得到一级目录

93 int dir1 = hashcode&15;94

95 //右移4位再与上15得到二级目录

96 int dir2 = (hashcode>>4)&0xf;97

98 String savepath = path + File.separator + dir1 + File.separator +dir2;99

100 //判断目录是否存在、不存在就创建

101 File file = newFile(savepath);102 if(!file.exists()){103 file.mkdirs();104 }105 returnsavepath;106 }107

108

109 //生成唯一的文件名、防止同名文件被覆盖

110 publicString generateFileName(String filename){111 //83434-83u483-934934

112 return UUID.randomUUID().toString() + "_" +filename;113 }114

115 public voiddoPost(HttpServletRequest request, HttpServletResponse response)116 throwsServletException, IOException {117 doGet(request, response);118 }119

120 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值