Answers:
如果您使用S3来存储用户上传的数据,尤其是在分布式环境中,则一个重要的考虑因素是S3最终“一致”(尽管某些区域在写后读方面是一致的)。这样的结果是您可以成功上传文件,但是如果此后立即检查其是否存在,可能会发现该文件不存在。对于诸如更新或删除之类的方案,此问题尤为明显,在这种情况下,即使写后读取一致性也无济于事。
无论采用哪种方法,以上内容都将适用于您上传到S3的内容。实际上,对于S3可能遇到的大多数问题,这都是正确的-与其说是存储数据的方法,还不如说是S3的局限性,这可能是最成问题的。
S3fs使用S3 API,就像PHP(或其他)SDK一样。此外,S3旨在处理相当高的并发程度-因此(除了一致性问题外)在多个实例上安装它应该没有问题(请记住,它不是传统的文件系统-诸如锁定,等在S3端处理)。
也就是说,每种实现都有一些潜在的优点和缺点:
S3fs:
SDK:
在“安全性”方面,您可能意味着“防止数据损坏”或“防止未经授权的访问”。关于前者,SDK可能有助于处理最终的一致性(以更多冗长的错误的形式),但是底层存储是相同的,我希望两者之间的差异很小。关于访问控制-您可以使用IAM创建一个受限帐户,但是该帐户仍需要对您的S3文件具有读/写访问权限。两者都应具有足够的安全性,无论哪种情况,都需要妥协您的系统才能访问S3存储桶-但是,我建议使用S3fs(因为凭据通常存储在webroot外部,并且根本无法通过进行访问) PHP)的安全性稍好一些。
个人意见:对于只有一个上载目录(例如,一个使用该目录的站点)并且访问相当简单(只需要上载文件并偶尔进行更新/删除)的情况,我更喜欢s3fs。如果您需要更复杂的访问权限(例如部分下载,多个存储桶等),或者将S3 SDK用于其他目的,那么我也将坚持使用SDK进行上传。
我希望通过PHP lib上传到S3。在每个服务器上安装S3会更容易。
看看这个例子:http : //aws.amazon.com/code/126
对于我的项目之一,我使用了以下库:http : //undesigned.org.za/2007/10/22/amazon-s3-php-class。对我来说真的很好。
您可以允许用户从浏览器直接上传到s3,而无需上传到您的服务器(然后上传到s3。)
这是一个很好的提示:https : //leonid.shevtsov.me/post/demystifying-s3-browser-upload/
文件上传后,如果您需要处理文件(zip,转码等),则可以使用S3fs