1

我想使用 Amazons S3 服务来存储用户上传到我的 LAMP 包的文件。我想知道这样做最好(时间、成本、安全性等)是什么。我很熟悉使用带有 PHP 处理的 HTTP 上传文件,但我总是将它保存到本地存储中。我应该有一个 tmp 目录,我可以从中上传 SDK,还是应该甚至可以将文件从数据变量上传到 S3?我也希望能够处理 5 GB 的文件,但目前我只运行半 GB 的内存,这会在我的项目中引起任何问题吗?请记住,我的 Web 服务器是 EC2 服务器。谢谢您的帮助。

4

1 回答 1

2

Q1:从内存上传而不创建临时文件。

是的,你可以做到。Amazon SDK 具有“putObjectFile”和“putObjectString”函数,第一个从临时文件创建对象,第二个从字符串创建对象。

Q2:上传大文件(5GB)。

虽然您可以获得具有 5GB 内存的服务器,但在上传发生时将要上传的数据完全存储在内存中有点矫枉过正 - 因此,从该文件中获取一个用于上传和逐块流式传输的临时文件可能是明智的. 要在 PHP 中处理 curl 中的块,您可能需要添加CURLOPT_READFUNCTION来一次读取文件的一部分以进行上传。

回调函数的名称,其中回调函数采用三个参数。第一个是 cURL 资源,第二个是通过选项 CURLOPT_INFILE 提供给 cURL 的流资源,第三个是要读取的最大数据量。回调函数必须返回一个长度等于或小于请求数据量的字符串,通常通过从传递的流资源中读取它。它应该返回一个空字符串来表示 EOF。

您可以在 Amazon 开发工具包 function 中找到 curl 函数getResponse()。该类被标记为“final”,因此您需要实际修改 SDK 以添加它。

Q3:成本。具有稍大硬盘(用于存储临时文件)的服务器很可能比添加内存更便宜。

Q4:安全。您可以将临时文件存储在 Web 根目录之外,因此它们将与您的网络服务器一样安全。如果您的网络服务器受到威胁,他们无论如何都会获得您的 Amazon 密钥 - 因此,这实际上不应该比保护您的应用程序的其余部分更令人担忧。

于 2012-10-15T03:49:37.373 回答