2010-05-19 3 views
5

Ich benutze Amazon S3, um die MP3-Datei dann erlauben unsere Website-Besucher, die mp3 von Amazon AWS herunterladen. Ich benutze S3Fox, um die Datei zu verwalten, alles scheint gut zu funktionieren, bis vor kurzem haben wir viele Beschwerden von Besuchern bekommen, dass das MP3 über den Browser gestreamt wurde anstatt den Browser-Speichern-Dialog anzuzeigen. Ich versuche für einige mp3 und beachten Sie, dass für einige mp3, das Speichern Dialogfeld angezeigt wird, und für einige andere werden sie per Browser gestreamt. Was kann ich tun, um zu erzwingen, dass die mp3-Datei statt über den Webbrowser gestreamt wird ....Amazon AWS S3 zu erzwingen Download Mp3-Datei statt Stream Es

Jede Hilfe wäre sehr willkommen. Dank

Antwort

9

Um dies zu tun, müssen Sie die Content-Disposition-Header setzen:

Content-disposition: attachment; filename=song.mp3 

Ich glaube nicht, dies mit S3Fox möglich ist. Sie könnten Bucket Explorer (nicht kostenlos) verwenden oder ein Skript zum Hochladen der Dateien schreiben.

+0

Hmm, welche Art von Skript, das wäre? Könnten Sie das mit z.B. s3cmd (http://s3tools.org/s3cmd)? – Jonik

+0

Ich bin mir nicht sicher über s3cmd. Sehen Sie diesen Forenbeitrag http://developer.amazonwebservices.com/connect/thread.jspa?messageID=67395. Sie können die REST-API zum Festlegen der Header verwenden. Amazon bietet Bibliotheken für viele Sprachen (Ruby, Python, C#). Sie können die Sprache Ihrer Wahl verwenden, um das Skript zu schreiben. – kgiannakakis

+0

danke für deine Antwort, ich verwende CloudBerry (Freeware), um den Content-Header zu setzen. Es funktioniert gut! Vielen Dank – Calua

2

Ok, es ist lange her, seit du das fragst, aber ich hatte das gleiche Problem und ich möchte meine Lösung mit der Community teilen, nur für den Fall, dass jemand anderes diese Sache lösen muss. Natürlich können Sie Content-Type und Content-Disposition von der Amazon S3-Konsole aus ändern, aber das Interessante ist, es programmgesteuert zu machen.

Der folgende Code funktioniert gut für mich:

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

Hoffe, es kann andere hilft mit dem gleichen Problem zu kämpfen.

2

Dies endete mit meiner Lösung für das Herunterladen von Dateien aus AWS S3.

In Safari wurden die Dateien als HTML-Dateien heruntergeladen, bis ich aufhörte, die Readfile zurück zu geben und nur die Funktion allein ausgeführt.

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

Dies scheint den Download von S3 nicht zu erzwingen, stattdessen schieben Sie die Datei von S3 über Ihren Webserver zurück und binden Ihre Webserver-Ressourcen, um den Download zu erzwingen. – davidjbullock

+0

@davidjbullock Nicht sicher, ob es war oder nicht, aber das war ein schlechtes Beispiel. Ich habe mein Beispiel aktualisiert, um zu zeigen, was ich besser mache. –

0

Klicken Sie im s3-Verwaltungskonsole-Fenster mit der rechten Maustaste und wählen Sie Eigenschaften.

Klicken Sie auf Metadaten.

Klicken Sie auf mehr Metadaten

Key hinzu: Content-Disposition Wert: Befestigung

Speichern. Das ist alles.

Hier ist ein Bild http://i.imgur.com/2PWK3xF.jpg