【问题标题】:Methods for serving files through Servlets通过 Servlet 提供文件的方法
【发布时间】:2011-06-12 12:50:37
【问题描述】:

为简洁起见,请考虑一个 facebook 风格的图像内容服务应用。用户可以上传内容以及访问其他人共享的内容。我正在寻找通过 Java servlet 处理这种文件服务应用程序的最佳方法。令人惊讶的是,关于该主题的信息很少。如果有人能告诉我他们在小型设置(几百个用户)上的个人经历,我将不胜感激。

到目前为止,我很想将数据库用作文件系统(使用 mongodb),但这种方法看起来既麻烦又乏味,并且需要复制 OS 本机文件系统已经提供的部分功能。我不想使用商业软件,也不想像 facebook 这样有带宽来编写自己的软件。我想要的只是能够通过具有 RAID 或类似功能的小型服务器上的免费软件来实现这一点。能够很好地扩展到多台服务器的解决方案将是一个加分项。重要的是通过 java servlet 提供服务(我愿意研究替代方案,但它们必须可以通过 java 使用)。

如果有任何帮助,我将不胜感激。任何对第一手经验的参考也会有所帮助。谢谢。

【问题讨论】:

标签: java database servlets filesystems io


【解决方案1】:

大师-

我为我的大家庭成员设置了类似的东西来分享照片。这是一个稍微复杂的过程,包括以下内容:

1) 注册 Amazon Web Services,尤其是他们的 S3(简单存储服务)。有一个免费的存储层,应该可以覆盖您描述的用户数量。

2) 设置一个接受上传的网络应用程序。我将Uploadify 与 jQuery 和 ajax 结合使用,以上传到一个 servlet,该 servlet 接受、扫描、记录和对文件执行任何我想要的操作。在servlet方面,我使用ESAPI's上传验证机制,它是验证引擎的一部分,它只是建立在Commons File Upload之上,我自己也使用过。

3) 适当处理文件后,我使用JetS3t 作为我的 Java-AmazonS3 API 并将文件上传到 Amazon S3。届时,用户可以根据他们的访问级别下载或查看照片。我发现执行此操作的最简单方法是将 JetS3t 与 Web 应用程序身份验证结合使用来创建临时 URL,这使用户可以在特定时间内访问文件,之后 URL 将变得不可用。

有几件事,如果您不关心文件处理并完全信任上传文件的人,您可以直接上传到 Amazon S3。但是,我发现在执行最后一步并将文件放到 Amazon S3 之前,将文件上传到我的服务器并完成所有处理、检查和记录要容易得多。

如果您对其中的任何细节有任何疑问,请告诉我。

【讨论】:

    【解决方案2】:

    虽然 Owens 的建议非常好,但您可以考虑另一种选择 - 您所描述的是内容存储库。

    由于您对服务器有足够的控制权,可以安装(非商​​业)软件,您可能对Apache Jackrabbit* 内容存储库感兴趣。它甚至包括一个 Java API,因此您应该能够从您的 Servlet 控制软件(至少在添加和提取内容方面)。

    实际上,如果您将这个想法与 Owens 结合并对其进行扩展,您实际上可以在 Amazon S3 空间上托管存储库,并使用免费层级的 Amazon EC2 实例来托管软件本身。 (虽然,我知道免费层 EC2 实例仅在第一年免费)

    HTH

    注意。我确信存在其他内容存储库,但 JackRabbit 是我玩过的唯一一个(虽然是短暂的)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 2011-06-03
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多