You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS S3上传文件成功但调用GetObject报错无法在浏览器展示文件

问题原因

你的上传逻辑是先通过$s3->bucket('my-bucket-name')获取指定桶的资源对象,再调用putObject方法,符合AWS PHP SDK资源接口的调用规范,所以可以正常运行。
报错的核心原因是你在拉取文件时,直接在S3服务资源对象上调用了getObject方法,资源接口不支持直接在服务层调用该方法,必须先绑定对应的桶资源。你现在的报错属于方法调用方式错误,不是权限问题:如果是权限不足,返回的错误会是Access Denied类提示,和你当前的报错内容不符。

解决方案

方案1:和上传逻辑对齐,先获取桶资源再调用方法

修改aws_file_get函数代码如下:

function aws_file_get($key)
{
    $aws = aws();
    $s3 = $aws->s3;
    // 先实例化对应桶的资源对象
    $bucket = $s3->bucket('my-bucket-name');
    $result = $bucket->getObject([
        'Key'    => $key
    ]);

   // 输出对象到浏览器
   header("Content-Type: {$result['ContentType']}");
   echo $result['Body'];
}

方案2:通过S3客户端实例直接调用方法

如果不想先获取桶资源,可以调用SDK的客户端实例执行操作,代码如下:

function aws_file_get($key)
{
    $aws = aws();
    $s3 = $aws->s3;
    // 先获取S3客户端实例再调用getObject,需传入Bucket参数
    $result = $s3->getClient()->getObject([
        'Bucket' => 'my-bucket-name',
        'Key'    => $key
    ]);

   // 输出对象到浏览器
   header("Content-Type: {$result['ContentType']}");
   echo $result['Body'];
}

内容的提问来源于stack exchange,提问作者joanb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:36:05