/ / Enregistrer l'image téléchargée sur S3 avec Django - python, django, amazon-s3, boto

Enregistrer l'image téléchargée sur S3 avec Django - python, django, amazon-s3, boto

J'essaie de sauvegarder une image sur S3 en utilisant boto. Il enregistre un fichier, mais ne semble pas l’enregistrer correctement. Si je tente d’ouvrir le fichier en S3, il affiche simplement une icône d’image cassée. Voici le code que j’utilise:

# Get and verify the file
file = request.FILES["file"]
try:
img = Image.open(file)
except:
return api.error(400)

# Determine a filename
filename = file.name

# Upload to AWS and register
s3 = boto.connect_s3(aws_access_key_id=settings.AWS_KEY_ID,
aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY)
bucket = s3.get_bucket(settings.AWS_BUCKET)
f = bucket.new_key(filename)
f.set_contents_from_file(file)

J'ai aussi essayé de remplacer la dernière ligne par:

f.set_contents_from_string(file.read())

Mais cela n’a pas fonctionné non plus. Y at-il quelque chose d’évident qui me manque ici? Je suis conscient que django-storages a un backend boto, mais à cause de la complexité de ce modèle, Je ne veux pas utiliser de formulaires avec Django-storages.

Réponses:

1 pour la réponse № 1

Tu devrais utiliser django-stockages qui utilise boto intérieurement.

Vous pouvez soit échanger la valeur par défaut FileSystemStorageou créez une nouvelle instance de stockage et enregistrez manuellement les fichiers. Sur la base de votre exemple de code, je suppose que vous voulez vraiment utiliser la première option.

S'il vous plaît envisager d'utiliser Django "s Form au lieu d'accéder directement à la demande.