AWS S3 URL与原始URL不同

时间:2019-02-22 10:33:41

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

我正在将文件从php上传到AWS s3。我已经成功上传了文件。

它返回的网址是=> https://BUCKETNAME.s3.ap-south-1.amazonaws.com/images1740/1550830121572.jpg

实际网址为=> https://s3.ap-south-1.amazonaws.com/BUCKETNAME/images1740/1550830121572.jpg (存储桶名称以url开头而不是开头)

因此,加载图像时出现错误=>“找不到指定的密钥”

$source = $source;
$bucket = 'xxxxxxxxxxxxxxxxx';
$keyname = 'images'.$usr_id."/".$name;

// for push

$s3 = S3Client::factory(
    array(
        'credentials' => array(
            'key'    => "xxxxxxxxxxxxxx",
            'secret' => "xxxxxxxxxxxxxxx"
        ),
        'version' => 'latest',
        'region'  => 'ap-south-1'
    )
);

try {
    // Upload data.
    $result = $s3->putObject(array(
        'Bucket' => $bucket,
        'Key'    => $keyname,
        'SourceFile' => $source,
        'ServerSideEncryption' => 'AES256',
    ));

    // Print the URL to the object.
    print_r($result);
    return $result['ObjectURL'] . PHP_EOL;
    // print_r($result);
} catch (S3Exception $e) {
    echo $e->getMessage() . PHP_EOL;
}

1 个答案:

答案 0 :(得分:1)

在初始化S3客户端时将use_path_style_endpoint设置为true,以在构建对象URL时默认使用S3路径样式端点。 1

如果存储桶名称为有效域名,则实现详细信息的对象URL将采用路径样式,否则,将回退到S3路径样式。
您想一直保持以后的行为。

$s3 = S3Client::factory(
    array(
        'credentials' => array(
            'key'    => "xxxxxxxxxxxxxx",
            'secret' => "xxxxxxxxxxxxxxx"
        ),
        'use_path_style_endpoint' => true,
        'version' => 'latest',
        'region'  => 'ap-south-1'
    )
);

如果要一次性禁用PutObject操作,也可以执行以下操作。

$result = $s3->putObject(array(
    'Bucket' => $bucket,
    'Key'    => $keyname,
    'SourceFile' => $source,
    'ServerSideEncryption' => 'AES256',
    '@use_path_style_endpoint' => true
));