2012-05-19 4 views
5

S3 PHP Sınıfını kullanarak Amazon S3'ü öğreniyorum. Tüm dosyalarımı S3 grubuma yükledim, şimdi de paketimdeki her bir dosya için bağlantılar oluşturmak istiyorum.Amazon S3 kepçe nesnesi için indirme linki nasıl oluşturulur?

Aşağıdaki işlev benim için çalışacak mı?

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); 

Ya get_object_url gibi başka bir fonksiyon ancak get_object_url() benim S3 sınıfında.

Undesigned'ın Amazon S3 PHP class kullanıyorum. // [YourBucketName] .s3.amazonaws.com/[DosyaAdınız]

Madem belirtilen: Ortak kova erişmek istiyorsanız

+0

olası yinelenen [nasıl php içeren bir dosyayı indirmek yoktur ve Amazon S3 sdk?] (http: // stacko verflow.com/questions/7389394/how-do-i-download-a-file-with-php-and-the-amazon-s3-sdk) –

cevap

10

aşağıdaki desenler S3 URL'ler oluşturmak için geçerlidir:

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

İndirme amaçları için kullanılamaz. http://stackoverflow.com/questions/7389394/how-do-i-download-a-file-with-php-and-the-amazon-s3-sdk –

+2

NOT! Kepçe üzerinde güvenceniz varsa, bu sizin için çalışmayacaktır. –

4

, o kadar basit

olarak http izinler doğru.

Kötüye kullanımı karşıdan yükleme hakkında endişeleniyorsanız, kimliği doğrulanmış bir URL (kod sıranızdan istediğinizi tahmin ediyorum) isteyeceksiniz. Bu durumda, ihtiyacınız olan şeylerin örneklerini içerdiği için Amazon SDK'sını kullanmanızı öneririm: http://aws.amazon.com/sdkforphp/.

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

Dokümanlar: http://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.S3.S3Client.html#_getObjectUrl

+1

'get_object_url()' işlevi kütüphanem ile çalışmaz, ne yapmalı şimdi. – Frank

+0

İşlevi lib –

+1

ile çalışma değil Güncel genel yöntem "getObjectUrl" için güncelleştirildi http://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.S3.S3Client.html#_getObjectUrl – Robbie

0

İnsanların zaten bu yanıt verdiler ama olanlar için daha fazla bağlam eklemek istedim görüyoruz Güvenli bir kovaya sahip olabilir (erişim gerektirir). Not: Doğrudan S3 hücresine konuşursanız URL'leri oluşturmanız gerekmez, daha sonra 'file_get_contents' vb. Kullanabilirsiniz, ancak çok curl isteklerini kullanamadığınızdan (hız için) çok daha yavaştır. Ancak daha yeni bir php sürümünüz varsa pthreads kullanabilirsiniz.

KURULUM: Amazon için S3 Class dosyasını yükleyin, besteci kullanarak eklemeyi veya S3.php dosyasını elle indirmenin kolay yollarını bulun.

SECURED DEĞİL: (size kova korudular zaman)

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

SECURED HTTPS (sadece temelde URL'yi kullanın bu konuda diğer mesajları bakınız):

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

(1) Https: // url oluşturun ve hepsini aynı anda almak için çoklu kıvrılma aracını kullanın (önerilir).

Basit bir örnek:

$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));  

fazla bilgi: Bilginize

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; 
}