使用PHP查看S3中是否存在对象

SSH*_*his 32 php amazon-s3

我正在使用PHP,我正在使用S3 API上传文件,但我想确保在上传之前存储桶中不存在这个确切的文件名.

我在网上找到了一些使用"file_get_contents"的例子但是这不意味着你必须先下载整个文件吗?通常,这些文件大约是10 MB,所以理想情况下,我真的不想这样做.

有没有办法在不下载文件的情况下使用"file_get_contents"?

或者更好的是,也许我可以使用API​​请求来查看文件名是否存在?

对于我来说,内容或文件大小是否相同只是文件名并不重要.

waq*_*qas 54

获取指定存储桶中是否存在指定的Amazon S3对象.

AmazonS3 doesObjectExist

$s3 = new AmazonS3();
$bucket = 'my-bucket' . strtolower($s3->key);

$response = $s3->doesObjectExist($bucket, 'test1.txt');

// Success? (Boolean, not a CFResponse object)
var_dump($response);
Run Code Online (Sandbox Code Playgroud)

  • 此链接和方法适用于AWS SDK for PHP的版本1.更新的用户指南在这里:http://docs.aws.amazon.com/aws-sdk-php/latest/index.html和检查文件存在的相关部分是使用流包装器,在这里找到:http: //docs.aws.amazon.com/aws-sdk-php/guide/latest/feature-s3-stream-wrapper.html (3认同)
  • 指向更新文档的链接,具体方法是:http://docs.aws.amazon.com/aws-sdk-php/v2/api/class-Aws.S3.S3Client.html#_doesObjectExist (3认同)
  • 要使用的正确函数应该是`$ s3-> doesObjectExist(...)` (2认同)

Ami*_*man 9

尝试使用以下代码:

$s3 = new S3();

$info = $s3->getObjectInfo($bucket, $filename);
if ($info)
{
    echo 'File exists';
}
else
{
    echo 'File does not exists';
}
Run Code Online (Sandbox Code Playgroud)

从亚马逊下载S3 SDK for php.有一个叫做S3的类; 创建S3的对象.该对象将允许调用getObjectInfo()方法.传递S3存储桶名称和文件名(通常将文件名称为密钥).如果文件存在,getObjectInfo()方法将返回一些信息,否则该方法将返回FALSE.


Dav*_*vid 6

请注意,其他建议基于AWS SDK for PHP的第1版.对于版本2,您需要熟悉此处的最新指南:

http://docs.aws.amazon.com/aws-sdk-php/guide/latest/index.html

上面链接中的"使用入门"部分将帮助您安装和设置SDK,因此如果您尚未阅读这些文档,请务必花时间阅读这些文档.完成设置后,您将需要熟悉此处的流包装器方法:

http://docs.aws.amazon.com/aws-sdk-php/guide/latest/feature-s3-stream-wrapper.html

最后,下面是一个简短的实际示例,说明如何在代码流中使用它.

require('vendor/autoload.php');

// your filename
$filename = 'my_file_01.jpg';
// this will use AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY from env vars
$s3 = Aws\S3\S3Client::factory();
// S3_BUCKET must also be defined in env vars
$bucket = getenv('S3_BUCKET')?: die('No "S3_BUCKET" config var in found in env!');
// register stream wrapper method
$s3->registerStreamWrapper();
// does file exist
$keyExists = file_exists("s3://".$bucket."/".$filename);
if ($keyExists) {
    echo 'File exists!';
}
Run Code Online (Sandbox Code Playgroud)