通过 php 从 s3 下载大文件

Download large files from s3 via php

我已经成功地使用 multiPart Upload 将大文件上传到 s3,但是我无法使用 getObject 函数再次下载它们。还有其他方法可以实现吗?

这是我的代码:

  $keyname= 'key';
  $bucket = 'bucketname';
  $fileName = 'filename.txt';

  $result = $s3->getObject([
      'Bucket' => $bucket,
      'Key'    => $keyname
  ]);

  var_dump($fileName);
  $result['ContentDisposition'] = 'attachment; filename="'.$fileName.'"';

  $result['fileName'] = $result['ContentDisposition'];
  header("Content-Type: {$result['ContentType']}");
  header("Content-Disposition: {$result['ContentDisposition']}");
  header("Content-Length: {$result['ContentLength']}");
  echo $result['Body'];

感谢您的帮助。这是我的解决方案:

  $keyname= 'key';
  $bucket = 'bucketname';
  $fileName = 'filename.txt';

  #create S3 Client
  $s3 = new S3Client([
      'version' => 'latest',
      'region'  => 'eu-central-1',
      'credentials' => [
      ]
  ]);

      $cmd = $s3->getCommand('GetObject', [
          'Bucket' => $bucket,
          'Key' => $keyname,
          'ResponseContentDisposition' => 'attachment; filename="'.$fileName.'"'
      ]);

      $request = $s3->createPresignedRequest($cmd, '+15 min');
      $presignedUrl = (string)$request->getUri();

      echo $presignedUrl;

在此之后,我通过 js 在我的前端使用 a 标签下载它

您可以像这样使用 S3 创建预签名连接

$keyname= 'key';
$bucket = 'bucketname';
$fileName = 'filename.txt';

$command = $s3->getCommand('GetObject', array(
       'Bucket' => $bucket,
       'Key'    => $keyname  
       'ResponseContentDisposition' => 'attachment; filename="'.$fileName.'"'
));

$signedUrl = $command->createPresignedUrl('+15 minutes');
header('Location: '.$signedUrl);