通过Servlet提供文件的方法

时间:2011-06-12 12:50:37

标签: java database servlets filesystems io

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

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

我很感激任何帮助。任何对第一手经验的参考也会有所帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

大师 -

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

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

2)设置接受上传的Web应用程序。我将Uploadify与jQuery和ajax结合使用,上传到一个servlet,它接受,扫描,记录,并对文件做任何我想做的事情。在servlet方面,我使用了ESAPI'的上传验证机制,它是验证引擎的一部分,它建立在Commons File Upload之上,我也单独使用它。

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

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

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

答案 1 :(得分:0)

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

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

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

HTH

NB。我确定存在其他内容存储库,但JackRabbit是我玩过的唯一一个(虽然简单)。