2012-06-01 6 views
17

私はPHPを使用していますが、S3 APIを使用してファイルをアップロードしていますが、アップロードの前にこの正確なファイル名がバケツに存在していないことを確認します。PHPを使用してS3にオブジェクトが存在するかどうかを確認

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

"file_get_contents"をファイルをダウンロードせずに使用する方法はありますか?

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

コンテンツまたはファイルサイズが同じかどうかは、ファイル名だけは重要ではありません。あなたが持っているか、PECL拡張モジュールHTTPをインストールする能力を持っている場合は

答えて

28

は、指定された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); 
+3

このリンクとメソッドは、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 – David

+2

更新されたドキュメントへのリンク、正確な方法は次のとおりです:http://docs.aws .amazon.com/aws-sdk-php/v2/api/class-Aws.S3.S3Client.html#_doesObjectExist –

+2

使用する正しい関数は '$ s3-> doesObjectExist(...)'でなければなりません。 –

3

は、あなたは簡単にヘッド要求を行うhttp_headを使用し、応答が200または404

5

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

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

$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を返します。

+0

少し説明すれば、この回答が多く改善されます。それはおそらくほとんどがコードで構成されているため、現在は「低品質」レビューキューに入っています。 – Blorgbeard

+0

ご意見ありがとうございます。私はちょうどコードを説明した。 –

+0

これはちょっとした答えです。最もシンプルで最高です。 –

関連する問題