【问题标题】:Generating files on java web server在 java web 服务器上生成文件
【发布时间】:2012-07-21 20:59:10
【问题描述】:

我有一个 Web 服务,它在服务器上生成一堆文件(比如 tomcat),这些文件被压缩并通过 servlet 的 OutputStream 流回客户端。

这部分很清楚。我正在努力解决的部分是如何管理这些文件,以便如果两个客户端碰巧同时使用此功能。

我可以想到几种可能的解决方案,但我不确定处理这个问题的最简单和最好的方法是什么,我很想听听一些想法。

例如:我可以创建一个带有附加到目录名称的时间戳的目录,例如tmp_123142345 并在我将 zip 文件写入流后删除此文件夹。两个人不太可能在同一毫秒内尝试下载同一个文件。

但是,有没有更好的方法?

【问题讨论】:

    标签: java web-applications


    【解决方案1】:

    这不太可能,但并非不可能。您可能需要一个可以在董事会会议上吹嘘它没有冲突的解决方案。 :)

    有一个全局同步计数器或更好的AtomicLong 计数器。创建目录名称如"tmp_"+ (atomicLongCounter.addAndGet(1))

    所以每个人都会有唯一的目录,即使他们在同一毫秒登陆。

    【讨论】:

    【解决方案2】:

    我认为您的解决方案还可以,但您确实不需要删除文件。您可以在任务管理器中编写一个任务,负责每天一次删除所有这些文件(只是清理目录)。看看here,有一些解决办法可以让de目录变干净。

    【讨论】:

    • 好吧,我担心目录泛滥。是的,我可以每天清理一次文件,但谁知道当时是否有人在下载东西?
    • 我理解你的意思,但你的应用程序在全球范围内使用,只是在你所在的位置?如果它仅在您所在的位置使用,您可以确定运行任务的时间,也许在黎明时分,从而减少某些用户正在下载某些文件的可能性。
    【解决方案3】:

    为什么不使用java.util.UUID?它会让您获得可以附加到文件名的唯一 ID。

    【讨论】:

    • 是的,它也可以工作......我真的希望找到一种更清洁的方式......也许它不存在:)
    【解决方案4】:

    您可以使用 File 类中的 createTempFile 方法。这将让 Java 为您创建一个独特的文件夹,您可以在其中放置文件...

    【讨论】:

      猜你喜欢
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 2018-01-18
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多