如何从远程服务器直接将文件上传到Amazon S3?

时间:2012-05-08 00:39:15

标签: amazon-s3 amazon-ec2 amazon-web-services

是否可以从远程服务器上传文件到S3?

远程服务器基本上是基于URL的文件服务器。例如,使用http://example.com/1.jpg,它为图像提供服务。它没有做任何其他事情,也无法在此服务器上运行代码。

可以让另一台服务器告诉S3从http://example.com/1.jpg

上传文件
           upload from http://example.com/1.jpg 
server -------------------------------------------> S3 <-----> example.com

4 个答案:

答案 0 :(得分:20)

如果您无法在服务器上运行代码或执行请求,那么不,您不能这样做。您必须将文件下载到您拥有并从那里上传的服务器或计算机。

您可以在http://docs.amazonwebservices.com/AmazonS3/latest/API/APIRest.html

看到您可以在亚马逊S3上执行的操作

检查REST和SOAP API的操作,您将看到无法为Amazon S3提供远程URL并让它为您抓取对象。所有PUT请求都要求将对象的数据作为请求的一部分提供。这意味着发起Web请求的服务器或计算机需要拥有数据。

过去我遇到过类似的问题,我想下载用户的Facebook缩略图并将其上传到S3以便在我的网站上使用。我这样做的方法是将图像从Facebook下载到我的服务器上的内存中,然后上传到Amazon S3 - 完整的事情花了不到2秒。上传到S3完成后,将存储桶/密钥写入数据库。

不幸的是,没有其他办法可以做到。

答案 1 :(得分:1)

我认为提供的建议相当不错,你可以把SCP文件转到S3 Bucket。给pem文件将是一个密码少的身份验证,通过PHP文件,您可以验证扩展。 PHP文件可以传递文件,作为SCP命令的参数。

此解决方案的唯一问题是,您必须在AWS中拥有您的实例。如果您的网站托管在其他托管服务提供商,并且您尝试将文件直接上传到S3 Bucket,则无法使用此解决方案。

答案 2 :(得分:1)

从技术上讲,using AWS Signature Version 4,假设您的remote server是下图中的客户,您可以在主服务器中准备表单,并将表单字段发送到远程服务器,它为curl它。详细示例here

Amazon S3 upload using a POST request

答案 3 :(得分:-2)

你可以使用终端的scp命令。

1)使用终端,转到您要传输到服务器的文件的地方

2)输入:

scp -i yourAmazonKeypairPath.pem  fileNameThatYouWantToTransfer.php ec2-user@ec2-00-000-000-15.us-west-2.compute.amazonaws.com:

N.B。添加&#34; ec2-user @&#34;在您从ec2网站获得的ec2blablbla之前!这是一个挑剔的错误!

3)您的文件将被上传并显示进度。当它是100%时,你就完成了!