php - 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';
}
谁能告诉我为什么我根本没有得到任何回应?
谢谢
解决方案
你可以试试HeadObject
这应该给出 200 OK 或 404 NOT FOUND,具体取决于该特定位置是否存在文件。
您还可以检查 IAM 用户的权限。它应该具有 GetObject 权限。
HeadObject 也可以从 AWS CLI 访问。如果您想确定问题是出在代码还是其他地方,这将非常有帮助。
推荐阅读
- java - 将航点添加到 Google Maps Intent (Android)
- android - 我的 android 服务是否能够访问我的应用程序中定义的单例对象
- c++ - 带有 __PRETTY_FUNCTION__ 的自定义错误处理程序
- c - 跟踪静态内联函数
- r - 在R中添加向量中的每个元素而不使用“SUM”函数
- wso2 - 尝试获取资源时出现 WSO2 NetworkError
- c - 如何修复'Alrady打印最后一行元素的所有数组元素'
- machine-learning - 为什么 PCA 效果很好,而保留的总方差很小?
- laravel-5 - 如何将生成的条形码发送到 laravel 中的电子邮件?
- sql - 如何在使用自联接时省略一些特定数据