簡體   English   中英

使用Django將上傳的圖片保存到S3

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM