【问题标题】:How to Download S3 Object and store it on server如何下载 S3 对象并将其存储在服务器上
【发布时间】:2017-05-04 09:09:59
【问题描述】:

我正在尝试下载私有 S3 对象并将其存储在网站服务器上

这就是我正在尝试的

    $s3 = new S3Client([
        'version' => 'latest',
        'region' => 'ap-south-1',
        'credentials' => array(
            'key' => '*****',
            'secret' => '*******'
        )
    ]);

 $command = $s3->getCommand('GetObject', array(
   'Bucket' => 'bucket_name',
   'Key'    => 'object_name_in_s3'  
   'ResponseContentDisposition' => 'attachment; filename="'.$my_file_name.'"'
));

$signedUrl = $command->createPresignedUrl('+15 minutes');
echo $signedUrl;

如何将这些文件保存在我的服务器上

【问题讨论】:

    标签: php amazon-s3 amazon


    【解决方案1】:

    来自Get an Object Using the AWS SDK for PHP

    use Aws\S3\S3Client;
    
    $bucket = '*** Your Bucket Name ***';
    $keyname = '*** Your Object Key ***';
    $filepath = '*** Your File Path ***';
    
    // Instantiate the client.
    $s3 = S3Client::factory();
    
    // Save object to a file.
    $result = $s3->getObject(array(
        'Bucket' => $bucket,
        'Key'    => $keyname,
        'SaveAs' => $filepath
    ));
    

    如果您只想从命令行(而不是应用程序)下载文件,可以使用AWS Command-Line Interface (CLI) -- 它有一个aws s3 cp 命令。

    您的代码中的Pre-signed URL 可用于授予对存储在 Amazon S3 存储桶中的私有对象的限时访问权限。通常,您的应用程序会生成 URL 并将其包含在网页中,供用户单击和下载对象。无需在服务器端使用它,因为服务器将拥有授权访问 Amazon S3 中内容的凭据。

    【讨论】:

    • 我试过你的代码,但我的对象是私有的,aws sdk 导致文件的简单链接像这样https://s3.ap-south-1.amazonaws.com/examle/files/U_zk2nMHTNVgJu1ZYQPoCdAicbjv6yl7Gw9Fr3fhKeDLtxpWSRaO4m0s.zip 它没有生成预签名的 url
    • 没错。为什么需要预签名 URL?您说“我正在尝试下载私有 S3 对象并将其存储在网站服务器上”——这不需要预签名的 URL。它需要普通的 AWS 凭证。如果您在 EC2 实例上下载,则为该实例分配一个角色,它将自动获取凭证。如果这不是您正在做的事情,请编辑您的问题并添加更多详细信息(例如网络服务器在哪里)。
    猜你喜欢
    • 1970-01-01
    • 2019-11-25
    • 2018-06-16
    • 2010-10-20
    • 2016-08-06
    • 2014-10-15
    • 1970-01-01
    • 2017-06-13
    • 2017-08-29
    相关资源
    最近更新 更多