web-dev-qa-db-ja.com

PHPを使用してS3にオブジェクトが存在するかどうかを確認する

PHPを使用しており、S3 APIを使用してファイルをアップロードしていますが、アップロード前にこの正確なファイル名がバケットに存在しないことを確認したかったです。

「file_get_contents」を使用するオンラインの例をいくつか見つけましたが、これは最初にファイル全体をダウンロードする必要があるという意味ではありませんか?通常、これらのファイルは約10 mbであるため、理想的には、これを行いたくありません。

ファイルをダウンロードせずに「file_get_contents」を使用する方法はおそらくありますか?

あるいは、APIリクエストを使用してファイル名が存在するかどうかを確認できますか?

コンテンツやファイルサイズが同じであるかどうかは重要ではなく、ファイル名だけです。

31
SSH This

指定されたバケットに指定された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);
52
waqas

以下のコードを使用してみてください。

$s3 = new S3();

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

php用にAmazonからS3 SDKをダウンロードします。 S3というクラスがあります。 S3のオブジェクトを作成します。オブジェクトはgetObjectInfo()メソッドを呼び出すことができます。 S3バケット名とファイル名を渡します(多くの場合、ファイル名はキーと呼ばれます)。ファイルが存在する場合、getObjectInfo()メソッドは何らかの情報を返します。それ以外の場合、メソッドはFALSEを返します。

9

他の提案は、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!';
}
6
David

PECL拡張機能 [〜#〜] http [〜#〜] をインストールしている、またはインストールできる場合は、 http_head を使用して簡単にヘッドリクエストを作成し、チェックできます応答が200または404であったかどうか。

3
Paulpro