您现在的位置: 365建站网 > 365文章 > 文件上传 探究

文件上传 探究

文章来源:365jz.com 点击数:192 更新时间:2009-09-17 10:25

用过webwork 的人都知道文件上传在组件的帮助下,太简单了,然而很少有人会发现这种情况:

当form表单中包含type不是file的标签的时候也会生成一个临时文件,而且当type为file对应的文件临时文件被删除后,这个文件依然存在。

这个是为什么呢?难道是Apache的童孩疏忽了,非也非也。

首先,我们来看下生成临时文件的代码,这些代码在org.apache.commons.fileupload.disk.DiskFileItem 中

草草看上去,这段代码只是对请求中的所有参数都建立一个临时文件,而且id都不一样。

莫非不信言中?这是一个BUG?

不然,看倒数第二行代码

这里就是精华所在,那它(org.apache.commons.io.FileCleaner )到底是干什么的?

先来看下这段代码的文档:

 * Keeps track of files awaiting deletion, and deletes them when an associated
 * marker object is reclaimed by the garbage collector.
 * <p>
 * This utility creates a background thread to handle file deletion.
 * Each file to be deleted is registered with a handler object.
 * When the handler object is garbage collected, the file is deleted.
 * <p>

 

这个类追踪了等待删除的文件,当一个关联的标记对象被垃圾回收器重新分配的时候(也就是一个对象失去引用的时候),这个文件被删除。这个工具创建了一个后台线程来处理文件的删除。每个要删除的文件会有一个句柄对象。当句柄对象被回收的时候,文件被删除。ps:这个线程是守护线程,关于什么是守护线程,请看本BLOG其他章节。

 

所以Apache的童孩想的还是很周到的,只是删除这些文件并不是实时的,只能耐性等待哈哈。

敬请拍砖!!!!!

生产内容,同时打通搜索引擎(SEO)与AI搜索引擎(GEO)流量入口的软件! 点击进入365建站器 »

您可能感兴趣的文章