botoを使ってS3に画像を保存しようとしています。 ファイルは保存されますが、正しく保存されたようには見えません。S3でファイルを開こうとすると、壊れた画像アイコンが表示されるだけです。ここで使用しているコードは次のとおりです。
# 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)
最後の行を次のように置き換えてみました。
f.set_contents_from_string(file.read())
しかし、それだけではうまくいきませんでした。私はdjango-storageにバックエンドがあることに気づいていますが、このモデルは複雑なので、 私はdjango-storagesでフォームを使いたくありません。
回答:
回答№1は1あなたは、 ジャンゴ - ストレージ 使用する boto
内部的に。
デフォルトを交換することができます FileSystemStorage
または、新しいストレージインスタンスを作成して手動でファイルを保存します。あなたのコード例に基づいて、私はあなたが本当に最初の選択肢に行きたがっていると思います。
djangoの使用を検討してください Form
リクエストに直接アクセスする代わりに。