通过php从s3下载大文件

vDrews

我已经成功地使用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在前端使用标签下载它

罗纳克·杜特

您可以像这样用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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章