网站程序0day,案例网站有哪些,微信管理系统后台,wordpress gzip 插件1、FileUpLoad组件介绍
为方便用户处理文件上传数据#xff0c;Apache 开源组织提供了一个用来处理表单文件上传的一个开源组件#xff08; Commons-fileupload #xff09;#xff0c;该组件性能优异#xff0c;并且其API使用极其简单#xff0c;可以让开发人员轻松实现…
1、FileUpLoad组件介绍
为方便用户处理文件上传数据Apache 开源组织提供了一个用来处理表单文件上传的一个开源组件 Commons-fileupload 该组件性能优异并且其API使用极其简单可以让开发人员轻松实现web文件上传功能因此在web开发中实现文件上传功能通常使用Commons-fileupload组件实现。 2、该组件相应的支撑jar包
Commons-fileupload和commons-io
commons-io 不属于文件上传组件的开发jar文件但Commons-fileupload 组件从1.1 版本开始它工作时需要commons-io包的支持。 3、fileupload组件工作流程 4、核心API
4.1 DiskFileItemFactory
DiskFileItemFactory 是创建 FileItem 对象的工厂这个工厂类常用方法
4.1.1 public void setSizeThreshold(int sizeThreshold)
设置内存缓冲区的大小默认值为10K。当上传文件大于缓冲区大小时 fileupload组件将使用临时文件缓存上传文件。
4.1.2 public void setRepository(Java.io.File repository)
指定临时文件目录默认值为System.getProperty(java.io.tmpdir).
4.1.3 public DiskFileItemFactory(int sizeThreshold, java.io.File repository)
构造函数
4.2 ServletFileUpload
ervletFileUpload 负责处理上传的文件数据并将表单中每个输入项封装成一个 FileItem 对象中。常用方法有
4.2.1 boolean isMultipartContent(HttpServletRequest request)
判断上传表单是否为multipart/form-data类型
4.2.2 List parseRequest(HttpServletRequest request)
解析request对象并把表单中的每一个输入项包装成一个fileItem 对象并返回一个保存了所有FileItem的list集合。
4.2.3 setFileSizeMax(long fileSizeMax)
设置上传文件的最大值
4.2.4 setSizeMax(long sizeMax)
设置上传文件总量的最大值
4.2.5 setHeaderEncoding(java.lang.String encoding)
设置编码格式
4.2.6 setProgressListener(ProgressListener pListener)
文件上传案例
5、实现步骤
、创建DiskFileItemFactory对象设置缓冲区大小和临时文件目录
、使用DiskFileItemFactory 对象创建ServletFileUpload对象并设置上传文件的大小限制。
、调用ServletFileUpload.parseRequest方法解析request对象得到一个保存了所有上传内容的List对象。
、对list进行迭代每迭代一个FileItem对象调用其isFormField方法判断是否是上传文件
为普通表单字段
则调用getFieldName、getString方法得到字段名和字段值
为上传文件
则调用getInputStream方法得到数据输入流从而读取上传数据。
6、上传文件的处理细节
6.1中文文件乱码问题
文件名中文乱码问题可调用ServletUpLoader的setHeaderEncoding方法或者设置request的setCharacterEncoding属性
6.2临时文件的删除问题
由于文件大小超出DiskFileItemFactory.setSizeThreshold方法设置的内存缓冲区的大小时Commons-fileupload组件将使用临时文件保存上传数据因此在程序结束时务必调用FileItem.delete方法删除临时文件。
Delete方法的调用必须位于流关闭之后否则会出现文件占用而导致删除失败的情况。
6.3文件存放位置
为保证服务器安全上传文件应保存在应用程序的WEB-INF目录下或者不受WEB服务器管理的目录。
为防止多用户上传相同文件名的文件而导致文件覆盖的情况发生文件上传程序应保证上传文件具有唯一文件名。
为防止单个目录下文件过多影响文件读写速度处理上传文件的程序应根据可能的文件上传总量选择合适的目录结构生成算法将上传文件分散存储。