Видя, существует ли объект в S3 с помощью PHP - программирование
Подтвердить что ты не робот

Видя, существует ли объект в S3 с помощью PHP

Я использую PHP, и я использую S3 API для загрузки файла, но я хотел убедиться, что это точное имя файла еще не существует в корзине перед загрузкой.

Я нашел несколько примеров в Интернете, которые используют "file_get_contents", но не означает ли это, что вам придется сначала загрузить весь файл? Обычно эти файлы составляют около 10 мб, поэтому в идеале я бы не хотел этого делать.

Возможно ли использовать файл "file_get_contents" без скачивания файла?

Или еще лучше, возможно, я мог бы использовать запрос API, чтобы узнать, существует ли имя файла?

Мне не важно, является ли содержимое или размер файла одинаковым, просто имя файла.

4b9b3361

Ответ 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.