Видя, существует ли объект в S3 с помощью PHP
Я использую PHP, и я использую S3 API для загрузки файла, но я хотел убедиться, что это точное имя файла еще не существует в корзине перед загрузкой.
Я нашел несколько примеров в Интернете, которые используют "file_get_contents", но не означает ли это, что вам придется сначала загрузить весь файл? Обычно эти файлы составляют около 10 мб, поэтому в идеале я бы не хотел этого делать.
Возможно ли использовать файл "file_get_contents" без скачивания файла?
Или еще лучше, возможно, я мог бы использовать запрос API, чтобы узнать, существует ли имя файла?
Мне не важно, является ли содержимое или размер файла одинаковым, просто имя файла.
Ответы
Ответ 1
Получает, существует или нет указанный объект 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);
Ответ 2
попробуйте использовать следующий код:
$s3 = new S3();
$info = $s3->getObjectInfo($bucket, $filename);
if ($info)
{
echo 'File exists';
}
else
{
echo 'File does not exists';
}
загрузите S3 SDK из amazon для php. Существует класс под названием S3; создать объект S3. Объект позволит вызвать метод getObjectInfo(). Передайте свое имя байта S3 и имя файла (часто имя файла называется ключом). Метод getObjectInfo() возвращает некоторую информацию, если файл существует, иначе метод вернет FALSE.
Ответ 3
Обратите внимание, что другие предложения основаны на версии 1 AWS SDK для PHP. Для версии 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!';
}
Ответ 4
Если у вас есть или есть возможность установить расширение PECL HTTP, вы можете использовать http_head, чтобы облегчить запрос главы и проверить, был ли ответ 200 или 404.