2011-11-08 6 views
0

Dans mon application j'utilise Zend_Service_Amazon_S3 pour stocker de gros fichiers multimédias. Lorsqu'un utilisateur télécharge un fichier, l'application copie d'abord le fichier sur le serveur local et à partir de là, le fichier, ainsi que certains en-têtes pour forcer le téléchargement du fichier, est envoyé au navigateur.Comment diffuser un fichier depuis S3 vers le navigateur?

Existe-t-il un moyen de laisser Amazon diffuser le fichier directement dans le navigateur sans avoir à copier le fichier entier sur le serveur local? Idéalement, l'application peut toujours choisir le nom du fichier téléchargé force (qui dans de nombreux cas n'est pas le même que le fichier sur Amazon).

Répondre

2

Une solution consiste à utiliser un serveur proxy inverse qui transfère la requête à Amazon S3, mais réécrit également les en-têtes de réponse pour modifier le nom de fichier et forcer le téléchargement. Cela évitera de devoir effectuer une copie locale de ce fichier, mais le transfert de données réel passera toujours par votre serveur.

Je suggère d'examiner Nginx pour cela et plus spécifiquement dans les options de configuration proxy_pass et add_header.


Une autre solution serait de faire une copie temporaire du fichier dans S3 (en utilisant l'objet PUT appel copie afin que vous ne avez pas besoin de le transférer sur votre serveur), puis sélectionnez le type de contenu et le contenu -Disposition des en-têtes sur cet objet pour forcer le téléchargement.

Vous pouvez ensuite diffuser ces fichiers directement à partir de S3 vers le navigateur du client, mais vous devrez les nettoyer régulièrement sur S3 car ils ne seront pas automatiquement supprimés lorsque le téléchargement est terminé.

+0

Merci. J'ai défini les en-têtes content-Type et Content-Disposition sur l'objet et j'ai utilisé le lien amazon pour permettre à un utilisateur de télécharger le fichier directement depuis Amazon – murze

Questions connexes