Solución:
Los siguientes patrones son válidos para construir URL de S3:
http(s)://<bucket>.s3.amazonaws.com/<object>
http(s)://s3.amazonaws.com/<bucket>/<object>
Si desea que el público acceda al depósito, es tan simple como
http: //[YourBucketName].s3.amazonaws.com /[YourFileName]
Siempre que establezca los permisos correctamente.
Si le preocupa el abuso de descargas, querrá una URL autenticada (que supongo que desea de su código de muestra). En cuyo caso, le sugiero que utilice el SDK de Amazon: http://aws.amazon.com/sdkforphp/ ya que contiene ejemplos de lo que necesita.
$s3->getObjectUrl($bucket, $filename, '5 minutes');
Documentos: http://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.S3.S3Client.html#_getObjectUrl
Veo que la gente ya ha respondido a esto, pero quería agregar más contexto para aquellos que pueden tener un depósito seguro (requiere acceso). Tenga en cuenta que no tiene que generar las URL si habla directamente con el depósito de S3, entonces puede usar ‘file_get_contents’, etc. pero es mucho más lento ya que no puede usar solicitudes de múltiples rizos (para velocidad). Sin embargo, puede usar pthreads si tiene una versión más reciente de php.
INSTALACIÓN: Instale el archivo S3 Class para Amazon, hay formas fáciles de agregarlo usando el compositor o simplemente descargando el archivo S3.php manualmente.
NO ASEGURADO: (vea otras publicaciones sobre este asunto, básicamente use la URL)
http(s)://<bucket>.s3.amazonaws.com/<object>
http(s)://s3.amazonaws.com/<bucket>/<object>
HTTPS SEGURO (cuando tiene su depósito protegido):
https://amazon.com/file/you/wanted.xxx?ID:XXXXX?SIG:YYYYY
(1) Cree una URL https: // y use la herramienta de rizos múltiples para obtenerlos todos al mismo tiempo (recomendado).
Un ejemplo simplista:
$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));
más información:
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-clase-php / documentación
FYI:
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;
}