【问题标题】:How do I download a file from a signed URL from Amazon S3 to a client machine using PHP?如何使用 PHP 从 Amazon S3 的签名 URL 将文件下载到客户端计算机?
【发布时间】:2023-03-13 20:27:01
【问题描述】:

当用户单击站点上的链接时,我正在尝试从 Amazon S3 存储桶中下载一个文件,该文件具有通过 php.ini 签名的 URL。到目前为止,这是我所拥有的:

$client = S3Client::factory(
    array(
      'key' => 'xyz',
      'secret' => 'abc'
));

$signedUrl = $client->getObjectUrl(<bucket>, $location, '+10 minutes');

现在,如何使用上述签名的 url 将文件下载到客户端计算机?

【问题讨论】:

  • 您是否尝试过使用file_get_contents 并传递网址?
  • 是的,我确实尝试过这个和 readfile()

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


【解决方案1】:

假设您仅在获取 url 时遇到问题并且已正确实现 api,这应该可以工作

$client = S3Client::factory(
    array(
      'key' => 'xyz',
      'secret' => 'abc'
));

$signedUrl = $client->getObjectUrl(<bucket>, $location, '+10 minutes');
file_put_contents($fileName, file_get_contents($signedUrl));

现在这会将文件放在您的服务器上。为了下载到客户端,有几种方法。让我试试最简单的

header('Content-Type: application/csv'); // Change mime type
header('Content-Disposition: attachment; filename=temp.csv'); // Change filename
header('Pragma: no-cache');
echo (file_get_contents($signedUrl));

这不是保存在服务器上,而是将输出提供给客户端。 另一种选择是将 url 发送到 javascript 并从客户端下载。

【讨论】:

  • 我不想将文件下载到服务器,而是通过浏览器下载到客户端计算机。
  • @Rumi 让我也添加那部分
  • @Rumi 让我知道这是否有帮助或您是否需要其他东西 :)
  • 感谢@georoot。我之前也尝试过这种方法。它下载一个空的 jpeg 文件。
  • 不,它没有。当我打开下载的文件“解释 JPEG 图像文件时出错(不是 JPEG 文件:以 0x20 0x20 开头)”时收到此消息。文件大小刚刚好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 2017-08-30
  • 2019-07-03
  • 2021-12-10
相关资源
最近更新 更多