开发者社区> 风月无边> 正文

org.apache.commons.fileupload上传临时文件删除方法2则

简介: 在将文件项封装成FileItem 对象时,如果文件尺寸大于临界值,将会被写入临时文件。   清理方法1 这些临时文件在不再被使用的时候(如果相应的java.io.File是可回收的则更好)会自动被删除.这会被org.apache.commons.io.FileCleaningTracker的一个实例启动的一个收割线程默默执行.     在一个web应用中,资源清理是被javax.servlet
+关注继续查看

在将文件项封装成FileItem 对象时,如果文件尺寸大于临界值,将会被写入临时文件。

 

  • 清理方法1

这些临时文件在不再被使用的时候(如果相应的java.io.File是可回收的则更好)会自动被删除.这会被org.apache.commons.io.FileCleaningTracker的一个实例启动的一个收割线程默默执行.

    在一个web应用中,资源清理是被javax.servlet.ServletContextListener的一个实例控制的.在其他环境中,类似的观念定是适用的.

     FileCleanerCleanup

      web应用应该使用org.apache.commons.fileupload.FileCleanerCleanup的一个实例,只要把它 web.xml 中:

     <web-app>
       ...
       <listener>
         <listener-class>
           org.apache.commons.fileupload.servlet.FileCleanerCleanup
         </listener-class>
       </listener>
       ...
     </web-app>

不幸的是,事情到这里还没完。如果你和下面的情况一样,那么你就只需要按照上面的做,就可以清除资源了。
你使用的是commons-io 1.3或者更晚的版本。
你是从web应用的web-inf/lib里载入commons-io的,并不是从其它位置,如Tomcatcommon/lib下。
如果commons-io 1.3是从你的WEB容器的classpath里载入的,那么,下面的情况可能会出现:
建议你运行两个应用,一个叫A,一个叫B。(这两个应用可能是完全一样,只不过上下文名称不一样。)这两个应用都使用了FileCleanerCleanup。现在,如果你终止应用AB还在运行,这时,A会终止B的收割机线程。换言之,你要十分仔细地考虑是使用FileCleanerCleanup,还是不使用。    

  • 清理方法2

 创建一个 DiskFileItemFactory

      FileCleanerCleanup 提供一个 org.apache.commons.io.FileCleaningTracker 实例.此实例必须在创建一个 org.apache.commons.fileupload.disk.DiskFileItemFactory 时使用.这应该通过调用如下方法来实现:

 

FileCleaningTracker fileCleaningTracker = FileCleanerCleanup.getFileCleaningTracker(servletcontext);

 

DiskFileItemFactory factory = new DiskFileItemFactory();

 

factory.setFileCleaningTracker(fileCleaningTracker);

 

 FileCleanerCleanup 通过一个静态方法getFileCleaningTracker()提供一个
org.apache.commons.io.FileCleaningTracker 对象。构造DiskFileItemFactory后,需要设置一个 
FileCleaningTracker 对象,用于追踪产生的临时文件。如果不想追踪临时文件,设置 
FileCleaningTracker 为null。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Dubbo技术分享
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服务监控等内容,详见后面描述。
5 0
HashMap这样回答offer就稳了
这是我实习的第二个月。今天讲述的是HashMap。大家肯定对这个很熟悉。问题来了!
5 0
阿里云服务器使用过程心得与体会
本文主要记录作为一个服务器部署小白从零开始学习部署自己的博客项目到阿里云服务器上的过程以及遇到的困难,并以此作为参考。
4 0
HashTable,ConcurrentHashMap这些你知道吗
又到了整理技术点的时间了,今天讲述的是ConcurrentHashMap,大家对这个我相信也是很熟悉的,不知是否知道以下面试常问的一些技术点呢?
4 0
Spring 基于XML开发 bean 配置 连接池
Spring 基于XML开发 bean 配置 连接池
5 0
ECS使用体验
尝试在云服务器安装docker部署mysql并远程连接
5 0
Spring之XML 配置AOP 事务管理
Spring之XML 配置AOP 事务管理
4 0
一篇全了解Spring全注解详解
一篇全了解Spring全注解详解
6 0
万字长文Python面试题,年后找工作就靠这了(二)
万字长文Python面试题,年后找工作就靠这了(二)
4 0
+关注
风月无边
java,架构方面专家
367
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载