【问题标题】:How to upload files directly to Amazon S3 from a remote server?如何将文件从远程服务器直接上传到 Amazon S3?
【发布时间】:2017-04-26 15:32:00
【问题描述】:

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

远程服务器基本上是一个基于 URL 的文件服务器。例如,使用http://example.com/1.jpg,它提供图像。它不执行任何其他操作,也无法在此服务器上运行代码。

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

           upload from http://example.com/1.jpg 
server -------------------------------------------> S3 <-----> example.com

【问题讨论】:

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


    【解决方案1】:

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

    您可以在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 完成后,将存储桶/密钥写入数据库。

    不幸的是,没有其他方法可以做到这一点。

    【讨论】:

    • 您是如何将图像下载到内存并上传的?我现在正在尝试处理类似的情况,但我找不到下载文件并将其上传到 S3 而不将其保存到服务器磁盘的方法。
    • @ahmetcetin 只需用任何支持 AWS S3 api 的语言(例如 go 或 python)编写一些代码,然后在您的代码中进行下载,将下载内容保存到变量中,然后使用相同的变量进行填充上传到 S3 api 调用
    【解决方案2】:

    我认为提供的建议非常好,您可以将文件 SCP 到 S3 Bucket。提供 pem 文件将是一种无密码身份验证,通过 PHP 文件您可以验证扩展。 PHP 文件可以将文件作为参数传递给 SCP 命令。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        您可以从终端使用 scp 命令。

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

        2) 输入:

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

        注意在您从 Ec2 网站获得的 ec2blablbla 内容之前添加“ec2-user@”!!这是一个非常挑剔的错误!

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

        【讨论】:

        • 为什么会有人反对这个?你可以解释吗?这对我有用!
        • 投了反对票,因为这篇文章专门询问了 S3 并且 S3 不是普通的 ec2 实例,因此它没有运行 SSH 服务器。您需要使用 HTTP 协议与之通信。
        • 我想你可以启动一个 EC2 实例,用它来执行远程复制(服务器 -> EC2 -> S3),然后再次销毁 EC2 实例。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-07
        • 2012-11-08
        • 1970-01-01
        • 2010-09-12
        • 1970-01-01
        相关资源
        最近更新 更多