Saltar al contenido

¿Cómo crear un enlace de descarga para el objeto de un bucket de Amazon S3?

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;
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *