2010-04-14 26 views
4

j'étendu un ModelAdmin avec un « Télécharger le fichier » champ personnalisé, qui est un lien vers une URL dans mon projet Django, comme:Django comme proxy S3

http://www.myproject.com/downloads/1 

Là, je veux servir un fichier est stocké dans un seau S3. Les fichiers dans le compartiment ne sont pas lisibles par le public et l'utilisateur peut ne pas y avoir accès directement. Maintenant, je veux

  • éviter que le fichier doit être chargé dans la mémoire du serveur (ce sont des fichiers multi-gb)
  • éviter d'avoir des fichiers temporaires sur le serveur

L'idéal solution serait de laisser django agir comme un proxy qui transmet directement les morceaux S3 à l'utilisateur. J'utilise boto, mais je n'ai pas trouvé de possibilité de diffuser les morceaux. Des idées?

Merci.

Répondre

4

Plutôt que d'envoyer par proxy, pourquoi ne pas simplement rediriger? Utilisez la vue django sur www.myproject.com/downloads/1 pour diffuser une redirection HTTP vers l'URL de stockage S3. Il est possible de générer des URL authentifiées limitées dans le temps, par exemple. voir ici http://docs.amazonwebservices.com/AmazonS3/2006-03-01/dev/

Ensuite, le client télécharge le fichier directement à partir de S3, mais le contenu est toujours sécurisé et l'accès doit passer par votre application Django

+0

Je souhaite qu'il y avait d'autres réponses ici. J'ai besoin de la même chose sauf que j'ai besoin d'ajouter l'en-tête "Content-disposition: attachment". –