我正在使用PHP并使用S3应用程序接口上传文件,但是在上传之前,我希望确保存储桶中不存在这个确切的文件名。
我在网上找到了一些使用"file_get_contents“的例子,但这不是意味着你必须先下载整个文件吗?通常,这些文件大约是10MB,所以在理想情况下,我不会真的想这样做。
有没有办法在不下载文件的情况下使用"file_get_contents“?
或者更好的是,也许我可以使用API请求来查看文件名是否存在?
对我来说,内容或文件大小是否相同并不重要,重要的是文件名。
发布于 2012-09-10 18:51:42
获取指定的存储桶中是否存在指定的亚马逊S3对象。
$s3 = new AmazonS3();
$bucket = 'my-bucket' . strtolower($s3->key);
$response = $s3->doesObjectExist($bucket, 'test1.txt');
// Success? (Boolean, not a CFResponse object)
var_dump($response);
发布于 2014-12-03 10:33:20
尝试使用以下代码:
$s3 = new S3();
$info = $s3->getObjectInfo($bucket, $filename);
if ($info)
{
echo 'File exists';
}
else
{
echo 'File does not exists';
}
从亚马逊下载php的S3 SDK。有一个名为S3的类;创建一个S3对象。该对象将允许调用getObjectInfo()方法。传递您的密钥存储桶名称和文件名(通常将文件名称为S3 )。如果文件存在,getObjectInfo()方法将返回一些信息,否则该方法将返回FALSE。
发布于 2014-11-09 01:44:19
请注意,其他建议基于适用于PHP的AWS SDK版本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!';
}
https://stackoverflow.com/questions/10843327
复制相似问题