2012-05-19 35 views
5

S3 PHPクラスを使用してAmazon S3を学習しています。すべてのファイルをS3バケットにアップロードしました。これで、使用可能な各ファイルのリンクをバケットに作成します。Amazon S3バケットのオブジェクトのダウンロードリンクを作成するにはどうすればよいですか?

次の機能は私には役に立ちますか?

public static function getAuthenticatedURL($bucket, $uri, $lifetime, $hostBucket = false, $https = false) 
{ 

} 

    $s3 = new S3('access-key', 'secret-key'); 
    $s3->getAuthenticatedURL($bucket, $uri, $lifetime, $hostBucket = false, $https = false); 

それともget_object_urlのような他の機能が、私のS3クラスでget_object_url()ません。

私は未指定のAmazon S3 PHP classを使用しています。

+0

の可能重複〔どのように私は、PHPを使用してファイルをダウンロードしないとAmazon S3 sdk?](http:// stacko verflow.com/questions/7389394/how-do-i-download-a-file-with-php-and-the-amazon-s3-sdk) –

答えて

10

次のパターンは、S3のURLを構築するために有効です。

http(s)://<bucket>.s3.amazonaws.com/<object> 
http(s)://s3.amazonaws.com/<bucket>/<object> 
+2

ダウンロード目的では使用できません。 http://stackoverflow.com/questions/7389394/how-do-i-download-a-file-with-php-and-the-amazon-s3-sdk –

+2

注!バケツにセキュリティがある場合、これはあなたのためには機能しません –

4

あなたは国民がバケツにアクセスしたい場合は、HTTP

のように簡単です:だから長く設定したとして// [YourBucketName] .s3.amazonaws.com/[YourFileName]

アクセス許可を正しく設定します。

ダウンロードの嫌がらせが心配な場合は、認証されたURL(コードのサンプルから欲しいと思う)が必要になります。その場合は、Amazon SDKを使用することをお勧めします。http://aws.amazon.com/sdkforphp/には、必要なものの例が含まれています。

$s3->getObjectUrl($bucket, $filename, '5 minutes'); 

ドキュメント:http://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.S3.S3Client.html#_getObjectUrl

+1

'get_object_url()'関数が私のライブラリで動作しません、どうすればいいですか?今。 – Frank

+0

関数がlibで動作しない –

+1

現在のパブリックメソッド "getObjectUrl"に更新http://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.S3.S3Client.html#_getObjectUrl – Robbie

0

私は人々がすでにこれに対応してきたが、私はそれらのためのいくつかのより多くのコンテキストを追加したいことがわかりセキュリティで保護されたバケットを持っている可能性があります(アクセスが必要です)。 S3バケツと直接話す場合はURLを生成する必要はなく、 'file_get_contents'などを使用することもできますが、マルチカール要求(スピード)を使用できないため、はるかに遅くなります。しかし、新しいPHPのリリースがあれば、pthreadを使うことができます。

インストール: AmazonのS3クラスファイルをインストールします。コンポーザーを使用して追加する簡単な方法があります。あるいは、S3.phpファイルを手動でダウンロードするだけです。

確保されていない: (ちょうど基本的にURLを使用し、この問題に関する他の記事を参照してください)

http(s)://<bucket>.s3.amazonaws.com/<object> 
http(s)://s3.amazonaws.com/<bucket>/<object> 

SECURED HTTPS(あなたのバケツが保護していた場合):

https://amazon.com/file/you/wanted.xxx?ID:XXXXX?SIG:YYYYY 

(1) https:// URLを作成し、マルチカールツールを使用してそれらをすべて同時に取得する(推奨)。

単純な例:

$url = /path/to_the/file_name/file.ext 

//note check amazon to confirm the path which will contain only "_" and no spaces. 

$s3 = new S3($awsAccessKeyID, $awsSecretKey); 
$curls[] = $s3->get_object_url($bucketName, $uri, '1 hour'); 
var_dump($results = multiCurlRequest($curls));  

詳細:FYI

http://docs.aws.amazon.com/aws-sdk-php/v2/api/class-Aws.S3.S3Client.html#_getObjectUrl http://undesigned.org.za/2007/10/22/amazon-s3-php-class/documentation

function multiCurlRequest($curlList = array(),$user = '', $pass = '',$timeout = self::MULTI_REQ_TIMEOUT_SECS, $retTxfr = 1) { 

    if (empty($curlList) || count($curlList) == 0) return false; 

    $master = curl_multi_init(); 
    $node_count = count($curlList); 

    for ($i = 0; $i < $node_count; $i++) { 
     $ch[$i] = curl_init($curlList[$i]); 
     curl_setopt($ch[$i], CURLOPT_TIMEOUT, $timeout); // -- timeout after X seconds 
     curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, $retTxfr); 
     curl_setopt($ch[$i], CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
     curl_setopt($ch[$i], CURLOPT_USERPWD, "{$user}:{$pass}"); 
     curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, true); 
     curl_multi_add_handle($master, $ch[$i]); 
    } 

    // -- get all requests at once, finish when done or timeout met -- 
    do { curl_multi_exec($master, $running); } 
    while ($running > 0); 

    $results = array(); 

    // -- get results from requests -- 
    for ($i = 0; $i < $node_count; $i++) { 
     $results[$i] = curl_multi_getcontent($ch[$i]); 
     if ((int) curl_getinfo($ch[$i], CURLINFO_HTTP_CODE) > 399 || empty($results[$i])) { 
      $this->set_request( [ ['label' => '404', 'href' => $results[$i], '404' => '1' ] ]); 
      unset($results[$i]); 
     } 
     curl_multi_remove_handle($master, $ch[$i]); 
     curl_close($ch[$i]); 
    } 

    curl_multi_close($master); 
    if (empty($results)) return false; 
    //$results = array_values($results); // -- removed as we want the original positions 
    return $results; 
} 
関連する問題