【问题标题】:Tomcat deleting files when request finishes?请求完成时Tomcat删除文件?
【发布时间】:2012-03-08 03:45:26
【问题描述】:

我遇到了一个非常奇怪的问题。我正在使用commons-fileupload (1.2.1) 在我的 web 应用程序中处理文件上传(托管在 tomcat 7.0.23 中,并设置了 distributable 标志)。一旦我从我的DiskFileItemFactory(没有FileCleaningTracker)获得DiskFileItem 实例,我使用它的write 方法来存储文件(在DiskFileItemFactory 配置为使用的同一目录中,以防需要在文件流入时将文件写入磁盘)。问题是这个新文件(由我明确创建和命名)在请求完成处理后被删除。可以想象,当我需要再次访问该文件时,这是有问题的。

看似相关的花絮:

  • 有问题的目录不是 servlet 上下文中的默认临时目录,也不是 Tomcat 目录下的目录。
  • 在备用代码路径中,我立即复制该文件(而不是在不同的请求中),那个副本不会被删除。
  • 即使我在请求完成之前chmod a-w 文件,它仍然会在请求完成时被删除。

感谢您的帮助。

【问题讨论】:

    标签: java tomcat delete-file apache-commons-fileupload


    【解决方案1】:

    罪魁祸首呢? 9 多年前的一个流浪 finalize 方法正在做“清理”。

    【讨论】:

    • 道德:不要编写 finalize() 方法! ...并在 finally {} 块中清理您的资源,当您需要时,您可以看到它发生的位置。
    • @EJP 你在向合唱团布道,伙计。这段代码不是我写的,但我很乐意删除它。
    猜你喜欢
    • 2017-03-26
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2015-11-26
    • 2022-01-24
    相关资源
    最近更新 更多