是否可以从远程服务器上传文件到S3?
远程服务器基本上是基于URL的文件服务器。例如,使用http://example.com/1.jpg,它为图像提供服务。它没有做任何其他事情,也无法在此服务器上运行代码。
可以让另一台服务器告诉S3从http://example.com/1.jpg
upload from http://example.com/1.jpg
server -------------------------------------------> S3 <-----> example.com
答案 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。
答案 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%时,你就完成了!