2012-09-26 3 views
1

Je veux continuer à poser une question sur hier. Je veux télécharger quelques clips vidéo sur amazon s3. Ces vidéos sont générées en tant que résultats intermédiaires. Je préfère donc stocker ces petits clips vidéo en mémoire (environ 400 ~ 500 Ko), puis les télécharger sur s3. Après le téléchargement, le fichier temporaire peut être supprimé en mémoire. Par conséquent, je veux utiliser le fichier temporaire. Mais il y a des erreurs dans le code suivant. S'il vous plaît jeter un oeil et comment le faire correctement?Télécharger le fichier stocké en mémoire sur s3

@contextmanager 
    def s3upload(key): 
     with tempfile.SpooledTemporaryFile(max_size=1021*1000) as buffer: 
      yield buffer 
      buffer.seek(0) 
     # key.send_file(buffer) 
      k.set_contents_from_file(buffer) 
      k.set_acl('public-read') 


conn = boto.connect_s3() 
b = conn.get_bucket('cc_test_s3') 
k = Key(b) 
k.key = '1.flv' 
mime = mimetypes.guess_type('1.flv')[0] 

with s3upload(k) as out: 
    out.write('1.flv') 

sortie:

The size of file uploaded is 5 KB, which is much less than the actual size of 1.flv (~400 KB). 

Répondre

0

Je vous recommande d'utiliser s3fuse, qui sera essentiellement monter votre seau s3 sur votre disque dur et vous pouvez directement enregistrer les fichiers comme si vous enregistrez dans locale annuaire. Pour référence, vous pouvez regarder s3fuse - google-code

+0

Je crée un fichier temporaire sous le répertoire/tmp. Puis écrivez résultat intermédiaire à ce fichier temp. Une fois le fichier téléchargé, ce fichier temporaire est supprimé. – susanne

+0

Très bien, donc dans s3fuse, votre document sera occupé/stocké sur s3 seulement. vous aurez juste l'impression que c'est comme le répertoire local (/ tmp). vous n'avez pas besoin de supprimer le fichier temporaire. –

Questions connexes