将文件上传到存储服务的最佳方法是什么? (Amazon S3或EdgeCast)

时间:2010-12-16 11:47:21

标签: php curl upload amazon-s3 edgecast

我们有一个Web应用程序,需要使用EdgeCast或Amazon S3存储上传的图像。为此,我们需要先将这些图像重新上传到EdgeCast / S3。我能想到很多选择:

  1. 执行内联卷曲重新上传,这将使用所需的EdgeCast / S3 API上传图像。缺点是,对于并发上传,服务器负载将是巨大的。
  2. 队列重新上传。我知道这是可能的,但我不知道该怎么做。
  3. 不要再费心从客户端重新上传和直接上传到EdgeCast / S3。
  4. 将EdgeCast / S3的FTP挂载到文件系统中,然后只复制上传的文件,让FTP守护进程完成其余的工作。
  5. 哪个是最佳解决方案,还有其他解决方案吗?我怀疑它是1还是2。

    编辑:我的应用程序是PHP

4 个答案:

答案 0 :(得分:3)

不确定EdgeCast但我知道使用Amazon S3时,最好的方法是将文件直接发送到文件服务器。见http://doc.s3.amazonaws.com/proposals/post.html

这样做可以提供HTML FORM,其中包含文件夹ID,文件名,公钥,时间戳等字段,以确保它是安全的,只有您可以上传到服务器。一旦上传完成,服务器将重定向他们的浏览器,他们重定向到您可以检查查询字符串以查明上传是否成功,然后将FileID记录到您的数据库中。

非常适合减少服务器负载并为用户提供更快的体验,但如果上传成功但DB插入失败,则可能导致孤立文件。

答案 1 :(得分:1)

EdgeCast存储支持Rsync / sFTP配置,以自动同步存储服务器中的内容。 EdgeCast还支持“反向代理”或“客户原始”配置,以将内容从另一个Web服务器自动提取到缓存中。您可以将S3用作此客户来源的位置,或使用EdgeCast自己的云存储服务或EdgeCast网络之外的任何其他Web服务器。

答案 2 :(得分:0)

我所做的是将文件上传到临时目录,然后运行一个cron脚本,将PUT的文件运行到AWS上,以免导致上传过程对最终用户花费更长时间。

答案 3 :(得分:0)

AWS提供SDK for PHP来执行此操作。它甚至支持多部分上传,这对开发者来说是个好消息。

应该注意的是,适用于PHP的AWS开发工具包也将执行重试逻辑,并且(如果您使用的是Multipart,您应该这样做)可以恢复上传失败。