[英]Save uploaded image to S3 with Django
我正在嘗試使用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-storages有一個boto后端,但是由於此模型的復雜性, 我不想將表單與django-storages一起使用。
如果您不想使用django-storages,而只想將少量文件上傳到s3而不是所有文件,則下面是代碼:
import boto3
file = request.FILES['upload']
s3 = boto3.resource('s3', aws_access_key_id=settings.AWS_ACCESS_KEY, aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY)
bucket = s3.Bucket('bucket-name')
bucket.put_object(Key=filename, Body=file)
您應該使用內部使用boto
django- boto
。
您可以交換默認的FileSystemStorage
,或者創建一個新的存儲實例並手動保存文件。 根據您的代碼示例,我想您真的想使用第一個選項。
請考慮使用django的Form
而不是直接訪問請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.