Estoy usando la siguiente función php para dar acceso temporal al público a un archivo privado.No se puede anular el encabezado de disposición de contenido en s3
function get_s3_signed_url($bucket, $resource, $AWS_S3_KEY, $AWS_s3_secret_key, $expire_seconds) {
$expires = time()+$expire_seconds;
// S3 Signed URL creation
$string_to_sign = "GET\n\n\n{$expires}\n/".str_replace(".s3.amazonAWS.com","", $bucket)."/$resource";
$signature = urlencode(base64_encode((hash_hmac("sha1", utf8_encode($string_to_sign), $AWS_s3_secret_key, TRUE))));
$authentication_params = "AWSAccessKeyId=".$AWS_S3_KEY;
$authentication_params.= "&Expires={$expires}";
$authentication_params.= "&Signature={$signature}";
return $link = "http://s3.amazonAWS.com/{$bucket}/{$resource}?{$authentication_params}";
}
que quería añadir el encabezado de disposición de contenido para que pueda cambiar el nombre del archivo a test.mp3
cuando un usuario intenta acceder a esta url que por defecto es el nombre del archivo a 982jdjd2p3.mp3
$privateUrl = array('privateUrl' => get_s3_signed_url('testbucket', '982jdjd2p3.mp3', $my_aws_key, $my_aws_secret_key, 60));
He intentado añadir la siguiente línea de código a la función
$file_name = 'test.mp3';
$authentication_params.= "&Content-Disposition={$file_name}";
Sin embargo, cuando hago clic en la URL
http://s3.amazonAWS.com/testbucket/982jdjd2p3.mp3?AWSAccessKeyId=***&Expires=***&Signature=***&Content-Disposition=test.mp3
El nombre del archivo es propuesto para ser guardado como 982jdjd2p3.mp3
¿Cómo puedo reemplazar el encabezado de disposición de contenido para peticiones GET s3 utilizando esta función?
Ver también
Amazon S3 Change file download name
EDITAR
Aquí es el más reciente intento de cambiar el nombre del archivo con una petición de obtención de utilizar esta función.
function get_s3_signed_url($bucket, $resource, $AWS_S3_KEY, $AWS_s3_secret_key, $expire_seconds) {
$expires = time()+$expire_seconds;
// S3 Signed URL creation
$filename='moot.mp3';
$disposition = "response-content-disposition=" . urlencode("attachment; filename={$filename}");
$string_to_sign = "GET\n\n\n{$expires}\n/".str_replace(".s3.amazonAWS.com","", $bucket)."/$resource";
$string_to_sign .= "?{$disposition}";
$signature = urlencode(base64_encode((hash_hmac("sha1", utf8_encode($string_to_sign), $AWS_s3_secret_key, TRUE))));
$authentication_params = "AWSAccessKeyId=".$AWS_S3_KEY;
$authentication_params.= "&Expires={$expires}";
$authentication_params.= "&Signature={$signature}";
$authentication_params.= "&{$disposition}";
return $link = "http://s3.amazonAWS.com/{$bucket}/{$resource}?{$authentication_params}";
}
Gracias Jack! Sin embargo, solo guarda el título hasta el primer espacio. Por ejemplo, si '$ save_as = 'hello world';' el archivo se guardará como 'hello'. De cualquier forma alrededor de esto? – user784637
@ user784637 en ese caso, debería considerar agregar comillas dobles a su alrededor, p. 'filename =" hello world.txt "' –