2010-05-19 12 views
5

Estoy usando Amazon S3 para poner el archivo mp3 y luego permitir que nuestro visitante del sitio descargue el mp3 de Amazon AWS. Uso S3Fox para administrar el archivo, todo parece funcionar bien hasta hace poco recibimos muchas quejas del visitante de que el mp3 se transmitía por el navegador en lugar de mostrar el diálogo de guardar del navegador. Intento algo de mp3 y veo que, para algunos mp3, aparece el cuadro de diálogo para guardar, y para otros se transmiten a través del navegador. ¿Qué puedo hacer para forzar que el archivo mp3 se descargue en lugar de transmitirse a través del navegador web ...Amazon AWS S3 forzar Descargar archivo Mp3 en lugar de Stream It

Cualquier ayuda sería muy apreciada. Gracias

Respuesta

9

Para ello es necesario para establecer la cabecera Content-Disposition:

Content-disposition: attachment; filename=song.mp3 

No creo que esto es posible con S3Fox. Puede usar Bucket Explorer (no gratis) o escribir una secuencia de comandos para cargar los archivos.

+0

Hmm, ¿qué tipo de secuencia de comandos sería? ¿Podría hacer eso con, por ejemplo, s3cmd (http://s3tools.org/s3cmd)? – Jonik

+0

No estoy seguro acerca de s3cmd. Ver esta publicación del foro http://developer.amazonwebservices.com/connect/thread.jspa?messageID=67395. Puede usar la API REST para establecer los encabezados. Amazon proporciona bibliotecas para muchos idiomas (Ruby, python, C#). Puede usar el idioma de su elección para escribir el guión. – kgiannakakis

+0

gracias por su respuesta, estoy usando CloudBerry (freeware) para configurar el encabezado de contenido. ¡Funciona bien! muchas gracias – Calua

2

Ok, ha pasado mucho tiempo desde que preguntas esto, pero tuve el mismo problema y me gustaría compartir mi solución con la comunidad, en caso de que alguien más tenga que resolver esto. Por supuesto, puede cambiar Content-Type y Content-Disposition desde la consola de Amazon S3, pero lo interesante es hacerlo programáticamente.

El siguiente código funciona bien para mí:

require_once '../sdk-1.4.2.1/sdk.class.php'; 

// Instantiate the class 
$s3 = new AmazonS3(); 

// Copy object over itself and modify headers 
$response = $s3->copy_object(
    array(// Source 
     'bucket' => 'your_bucket', 
     'filename' => 'Key/To/YourFile' 
    ), 
    array(// Destination 
     'bucket' => 'your_bucket', 
     'filename' => 'Key/To/YourFile' 
    ), 
    array(// Optional parameters 
     'headers' => array(
      'Content-Type' => 'application/octet-stream', 
      'Content-Disposition' => 'attachment' 
     ) 
    ) 
); 

// Success? 
var_dump($response->isOK()); 

esperan que los pueda ayuda a otros que luchan con el mismo problema.

2

Esto terminó siendo mi solución para forzar la descarga de archivos de AWS S3.

En Safari, los archivos se estaban descargando como archivos .html hasta que dejé de devolver el archivo de lectura y simplemente ejecuté la función solo.

public function get_download($upload_id) 
    { 
    try { 
     $upload = Upload::find($upload_id); 
     if ($upload->deleted) 
     throw new Exception("This resource has been deleted."); 

     if ($upload->filename == '') 
     throw new Exception("No downloadable file found. Please email [email protected] for support."); 

     header("Content-Description: File Transfer"); 
     header("Content-Type: application/octet-stream"); 
     header("Content-Disposition: attachment; filename={$upload->uploaded_filename};"); 

     readfile("https://s3.amazonaws.com/stackoverflow/uploads/" . $upload->filename); 
     exit; 
    } catch(Exception $e) { 
     return $e->getMessage(); 
    } 
    } 
+6

Esto no parece forzar la descarga desde S3, en su lugar está empujando el archivo hacia atrás desde S3 a través de su servidor web, atando los recursos de su servidor web para forzar la descarga. – davidjbullock

+0

@davidjbullock No estoy seguro si fue o no, pero ese fue un mal ejemplo. Actualicé mi ejemplo para reflejar lo que hago mejor. –

0

En la ventana de la consola de administración de s3, haga clic con el botón derecho y seleccione Propiedades.

Haga clic en metadatos.

Haga clic en agregar más metadatos

Clave: content-disposition Valor: apego

Guardar. Eso es todo.

Aquí está una imagen http://i.imgur.com/2PWK3xF.jpg

Cuestiones relacionadas