Force-Download mit php auf Amazon S3
Ich versuche, mit http://code.google.com/p/amazon-s3-php-class/ zu zwingen-Download-Dateien von AWS S3. Ich habe eine mp3, die ich will, die Menschen zu "spielen" oder "download". Standardmäßig, wenn Sie den Zugriff auf die Datei direkt auf der s3 beginnt es zu spielen im browser. Ich muss hinzufügen einer option zum eigentlich download. Ich habe Gegoogelt und gefunden, kam mit nichts. Ich konzeptionell wissen, was geschehen muss, wissen aber nicht wie, es zu erzeugen, php. Ich weiß, ich muss zum ändern der Header Content-Disposition: attachment". Jegliche Hilfe würde sehr geschätzt werden.
Dank,
Michael
InformationsquelleAutor der Frage michaelespinosa | 2009-05-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die php-Skripte, die erwähnt wurden, bisher ok, aber der Haupt Nachteil ist, dass jedes mal, wenn ein Besucher auf Ihrer Website eine Datei anfordert, Ihren eigenen Server laden Sie es aus dem S3-und dann relais, dass die Daten an den browser. Für low-traffic-sites, ist es wahrscheinlich keine große Sache, aber für high-traffic, Sie wollen auf jeden Fall vermeiden, alles über Ihre eigenen Server.
Glücklicherweise gibt es ein ziemlich straight-forward Weg, um Ihre Dateien, die Sie gezwungen werden, zu download von der S3. Und du bist genau richtig - Sie wollen einfach nur, um die content-type und content-disposition (nur die Einstellung "content-disposition" wird in einigen Browsern, aber die Einstellung beide funktionieren sollte in allen Browsern).
Diesem code wird vorausgesetzt, dass Sie über die Amazon S3-PHP-Klasse aus Undesigned:
Nun alle Ihre Dateien werden gezwungen, zum herunterladen. Sie müssen möglicherweise den cache zu löschen um die Veränderung zu sehen. Und offensichtlich tun Sie das nicht auf jede Datei, die Sie eigentlich tun möchten geladen werden "inline" im browser.
Den schönen Teil mit dieser Lösung ist, dass Anwendungen, laden Sie die Medien-Dateien direkt (wie sagen wir mal ein mp3-player in Flash) nicht über die Pflege der content-type oder content-disposition -, so können Sie immer noch spielen Sie Ihre Dateien in den browser und dann den link zum download der gleichen Datei. Wenn der Benutzer schon fertig mit dem laden der Datei in flash, werden Sie die meisten wahrscheinlich noch im cache, was bedeutet, dass Ihre download super schnell und es wird nicht einmal kostet Sie jede extra Bandbreiten-Gebühren aus dem S3.
InformationsquelleAutor der Antwort Ben
Amazon hat nun dieses problem gelöst und erlaubt das überschreiben von Headern auf einer pro-Anfrage-basis mit signierten Anfragen:
http://docs.amazonwebservices.com/AmazonS3/latest/API/index.html?RESTObjectGET.html
w00t!
InformationsquelleAutor der Antwort Alex Neth
Nur fügen Sie diese an Ihre Datei Metadaten auf s3:
InformationsquelleAutor der Antwort Ran
Wollen, veröffentlichen Sie einen Beitrag zu diesem, Alex Niederl richtig auf diesen Verweis, aber ich glaube nicht, dass ein link ausreichend Informationen, die mit amazon AWS PHP-SDK2. Unten habe ich skizziert eine grundlegende (ungetestete) Methode zum aufrufen von Daten auf diese Weise verwenden, können Sie entweder S3 Factory-Methode oder AWS-Service-generator, um die S3-Client.
Können Sie dann unter Verwendung der PHP header("Location: $url"); um zu leiten die Besucher auf die MP3-Datei mit einer Kraft download, dies soll verhindern, dass es vom spielen im browser, Bitte beachten, ich nutze ResponseContentType ziemlich Häufig, aber ich habe noch nie verwendet ResponseContentDisposition mit AWS (sollte es nach den docs).
Umwandlung dieses Beispiel in einer Funktion soll einfach sein, Sie könnte sogar passieren in $Eimer, $key, $force_download als solche
WARNUNG, wenn Sie noch nicht herausgefunden, Bedarf diese der AWS PHP SDK 2 aktuell (7. April 2014) finden Sie hier http://aws.amazon.com/sdkforphp/ Dieser code ist meist pseudo-code und erfordern einige zusätzliche Optimierungen, um wirklich zu arbeiten, wie ich bin, verweisen auf diese aus dem Speicher.
InformationsquelleAutor der Antwort
So ändern Sie mein Beispiel oben werden wie diese
Nun werden Sie wollen, um einige Validierung zu finden, so dass Sie nicht geben der Welt den Zugriff auf jede Datei, die Sie auf S3, aber dies sollte funktionieren.
InformationsquelleAutor der Antwort respectTheCode
Wenn Sie eine Bibliothek wie Tarzan AWSkönnen Sie fügen Sie meta-Header, dass amazon gehören, wenn die Datei abgerufen wird. Check-out der meta-parameter in der update_object Funktion hier zum Beispiel:
http://tarzan-aws.com/docs/2.0/files/s3-class-php.html#AmazonS3.update_object
InformationsquelleAutor der Antwort Corey
Erwähnenswert ist auch Sie in der Lage sind zu schwer-legen Sie die Header für die Dateien in S3. Zum Beispiel, wenn Sie brauchen, um Kraft-herunterladen einer bestimmten Datei, können Sie das entsprechende Header für die Datei. Wie die säumigen zu streamen, und entweder mit einer sekundären Datei force-download oder verbringen Sie die Bandbreite für den Einsatz von php/fputs und force-download über PHP.
InformationsquelleAutor der Antwort Mahdi.Montgomery
Den code oben funktioniert, müssen Sie nur installieren Sie die S3 Komponist Abhängigkeit und der link in der autoload-Datei, legen Sie Ihren key/secret in config und stellen Sie dann den Eimer/Dateiname.
InformationsquelleAutor der Antwort user3715513
php laden Sie einfach die Datei auf den server, nicht der client. denken Sie daran, php, ändert nichts am client, nur es gibt Inhalte (html, javascript, css, xml, whatever...)
[edit: zur Verdeutlichung Hinzugefügt]: php dienen können audio-Inhalte, aber Sie wollen, um zu dienen eine web-Seite und audio zur gleichen Zeit. Zu bekommen, dass das Verhalten unserer Kunden, die Sie haben, um die client-Anfrage-Datei auf den web-Seite-html oder javascript.
So, musst du den client, um die Datei herunterzuladen. Zum Beispiel, haben Sie ein iframe auf der Seite mit der url der Datei auf s3. Verwenden Sie css, um den iframe unsichtbar. Sollte es Rendern der Seite und download und spielen Sie die mp3.
Ansonsten, schau mal in javascript mit Hilfe des kick download, wenn die Seite geladen wird. Ich bin mir nicht sicher, ob das möglich ist.
InformationsquelleAutor der Antwort Tim Hoolihan
Dies ist nun möglich durch überschreiben der S3-Header mit signierten Anfragen.
So, legen Sie diesen Header an:
Antwort darauf gefunden hier: https://stackoverflow.com/a/5903710/922522
InformationsquelleAutor der Antwort Justin
InformationsquelleAutor der Antwort John Erck
Ich habe nie versucht, zu Amazon S3-hosting, aber nicht Sie haben Zugang zu verwenden .htaccess-Dateien gibt es? Dann können Sie festlegen, Content-Type und Content-Disposition für ein ganzes Verzeichnis mit folgendem Eintrag:
InformationsquelleAutor der Antwort Preben