用过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的童孩想的还是很周到的,只是删除这些文件并不是实时的,只能耐性等待哈哈。
敬请拍砖!!!!!
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛