首页 > 解决方案 > AWS PHP SDK - 检查文件是否存在

问题描述

在这里变得非常沮丧。我正在尝试通过 PHP <> AWS S3 调用检查我的存储桶中的文件是否存在。有 3 种方法可以做到这一点,但似乎没有一种对我有用。

密钥、凭据、存储桶名称、文件路径和文件名都是正确的,但没有错误,而且所有 3 个选项都没有结果。

// Setup AWS SDK for S3
$credentials = new Aws\Credentials\Credentials('mykey', 'mysecret');
$s3 = new Aws\S3\S3Client([
    'version' => "latest",
    'region'  => "ap-southeast-1",
    'credentials' => $credentials
]);
// check if connection was successful
if (!$s3) {
    echo 'There was an error connecting to AWS S3 SDK';
}

// // option 1
$check_file = $s3->getObjectInfo('my.server.public', '/reports/ihg_seak/images/banner_' . $property_id . '.png');
if ($check_file) {
    $banner_image = 'banner_' . $property_id;
    $summary_image = 'summary_' . $property_id;
} else {
    $banner_image = 'banner_00';
    $summary_image = 'summary_00';
}

// option 2
$s3->registerStreamWrapper();
$filename = 's3://my.server.public/reports/ihg_seak/images/banner_' . $property_id . '.png';
$check_file = file_exists($filename);
if ($check_file) {
    $banner_image = 'banner_'.$property_id;
    $summary_image = 'summary_'.$property_id;
} else {
    $banner_image = 'banner_00';
    $summary_image = 'summary_00';
}

// option 3
$check_file = $s3->doesObjectExist('my.server.public', '/reports/ihg_seak/images/banner_' . $property_id . '.png');
if ($check_file) {
    $banner_image = 'banner_' . $property_id;
    $summary_image = 'summary_' . $property_id;
} else {
    $banner_image = 'banner_00';
    $summary_image = 'summary_00';
}

谁能告诉我为什么我根本没有得到任何回应?

谢谢

标签: phpamazon-s3

解决方案


你可以试试HeadObject

这应该给出 200 OK 或 404 NOT FOUND,具体取决于该特定位置是否存在文件。

您还可以检查 IAM 用户的权限。它应该具有 GetObject 权限。

HeadObject 也可以从 AWS CLI 访问。如果您想确定问题是出在代码还是其他地方,这将非常有帮助。


推荐阅读