首页 > 代码库 > commons-fileupload源码学习心得
commons-fileupload源码学习心得
commons-fileupload依赖于commons-io包。
commons-fileupload的使用方法:
1.创建一个文件项目工厂类DiskFileItemFactory。
DiskFileItemFactory有俩个构造方法:
1 DiskFileItemFactory() 其中sizeThreshold是默认值10kB, 文件大小不超过这个值将内容保存在内存,超过这个值会把文件保存到临时目录下,可用System.getProperty("java.io.tmpdir")获取;2 DiskFileItemFactory(int sizeThreshold, File repository) 可以指定sizeThreshold, 和文件保存到磁盘的路径。
DiskFileItemFactory有一个属性FileCleaningTracker,设置这个属性可以用来追踪删除临时文件。当这个临时文件不再被使用时将会被立即删除,更精确的说是这个文件对象被垃圾收集器回收时,FileCleaningTracker将启动收获者线程(reaper thread)自动删除这个临时文件。FileCleaningTracker是commons-io包的工具类。
1 FileCleaningTracker fileCleaningTracker = FileCleanerCleanup.getFileCleaningTracker(servletcontext);2 DiskFileItemFactory factory = new DiskFileItemFactory();3 factory.setFileCleaningTracker(fileCleaningTracker); 4 ServletContext获取的几种方法:5 Javax.servlet.http.HttpSession.getServletContext();6 Javax.servlet.jsp.PageContext.getServletContext();7 Javax.servlet.ServletConfig.getServletContext();
2.创建一个文件处理类ServletFileUpload。
ServletFileUpload解析上传请求request的信息,封装到FileItem类中,我们通过FileItem可以获取文件的名称、大小、文件流等信息。
1 ServletFileUpload sfu = new ServletFileUpload(factory);2 ServletFileUpload可以设置:3 headerEncoding 读取请求头信息时使用的编码4 sizeMax 单次请求所能上传的文件总大小的最大size,默认是-1,不限制大小5 fileSizeMax 单次请求所能上传的单个文件最大size,默认是-1,不限制大小6 List<FileItem> items = sfu.parseRequest(req);
ServletFileUpload对上传请求信息的解析流程:
文件上传的html代码如下:
1 <form action="http://server.dom/cgi/handle" enctype="multipart/form-data" method=POST>2 What is your name? <input type=text name=submitter/>3 What files are you sending? <input type=file name=pics/>4 </form>
浏览器传送的数据格式如下:
1 Content-type: multipart/form-data, boundary=AaB03x 2 3 --AaB03x 4 5 content-disposition: form-data; name="field1" 6 7 Joe Blow 8 9 --AaB03x10 11 content-disposition: form-data; name="pics"; filename="file1.txt"12 13 Content-Type: text/plain14 15 ... contents of file1.txt ...16 17 --AaB03x--
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。