2010-05-19 15 views
5

Sto usando Amazon S3 per mettere il file mp3 e quindi consentire al nostro visitatore del sito di scaricare l'mp3 da Amazon AWS. Io uso S3Fox per gestire il file, tutto sembra funzionare bene fino a poco tempo fa abbiamo ricevuto molte lamentele da parte del visitatore che l'mp3 è stato trasmesso tramite il browser invece di visualizzare la finestra di dialogo di salvataggio del browser. Provo un po 'di mp3 e noto che per alcuni mp3 viene visualizzata la finestra di dialogo di salvataggio e per alcuni altri sono trasmessi via browser. Cosa posso fare per forzare che il file mp3 venga scaricato invece di essere trasmesso via browser ...Amazon AWS S3 per forzare il download di file Mp3 anziché Stream It

Qualsiasi aiuto sarebbe molto apprezzato. Grazie

risposta

9

Per fare ciò è necessario impostare l'header Content-Disposition:

Content-disposition: attachment; filename=song.mp3 

Non credo che questo è possibile con S3Fox. È possibile utilizzare Bucket Explorer (non gratuito) o scrivere uno script per caricare i file.

+0

Hmm, che tipo di script sarebbe? Potresti farlo ad es. s3cmd (http://s3tools.org/s3cmd)? – Jonik

+0

Non sono sicuro di s3cmd. Vedi questo post sul forum http://developer.amazonwebservices.com/connect/thread.jspa?messageID=67395. Puoi utilizzare l'API REST per impostare le intestazioni. Amazon fornisce librerie per molte lingue (Ruby, python, C#). Puoi usare la lingua che preferisci per scrivere lo script. – kgiannakakis

+0

grazie per la tua risposta, sto usando CloudBerry (freeware) per impostare l'intestazione del contenuto. Funziona bene! grazie mille – Calua

2

Ok, è passato molto tempo da quando lo chiedi, ma ho avuto lo stesso problema e mi piacerebbe condividere la mia soluzione con la comunità, nel caso in cui qualcun altro debba risolvere questa cosa. Naturalmente, puoi modificare Content-Type e Content-Disposition dalla console di Amazon S3, ma la cosa interessante è farlo a livello di programmazione.

Il seguente codice funziona bene per me:

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

Spero si può aiuta altri alle prese con lo stesso problema.

2

Questa è stata la mia soluzione per scaricare forzatamente i file da AWS S3.

In Safari i file venivano scaricati come file .html finché non smettevo di restituire il file di lettura e solo eseguivo la funzione da sola.

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

Questo non sembra forzare il download da S3, invece si sta spingendo il file da S3 attraverso il server web, legando le risorse del server web per forzare il download. – davidjbullock

+0

@davidjbullock Non sono sicuro che lo fosse o meno, ma quello era un cattivo esempio. Ho aggiornato il mio esempio per riflettere su ciò che faccio meglio. –

0

Nella finestra della console di gestione s3, fare clic con il pulsante destro del mouse e scegliere Proprietà.

Fare clic sui metadati.

Cliccare sulla aggiungere più metadati

chiave: Content-Disposition Valore: attachment

Salva. È tutto.

Questa è un'immagine http://i.imgur.com/2PWK3xF.jpg

Problemi correlati