2017-03-03 162 views
1

我想下面我寫的代碼,但它是拋出一個錯誤。我不確定我做錯了什麼。任何幫助表示讚賞如何在Django上將枕頭處理圖像上傳到S3?

def upload_img(request): 
    maxsize = (1024, 1024) 
    im = Image.open(request.FILES['image']) 
    im.thumbnail(maxsize) 
    img_name = 'test.jpg' 
    s3 = boto3.client('s3') 
    s3.put_object(
     Bucket=settings.AWS_S3_DEV_IMG_BUCKET, 
     Key=img_name, 
     Body=im.save(img_name, "JPEG"), 
     ContentType='image/jpeg', 
    ) 

錯誤:

'ParamValidationError: Parameter validation failed: 
Invalid type for parameter Body, value: None, type: <type 'NoneType'>, valid types: <type 'str'>, <type 'bytearray'>, file-like object 

回答

2

Image.save()方法不返回的圖像,它saves it to disk (or buffer) and returns None。這就是爲什麼boto抱怨NoneType參數。

您想要將數據保存到某個臨時緩衝區,然後將其傳遞給boto。例如:

buffer = io.BytesIO() 
im.save(buffer, "JPEG") 
buffer.seek(0) # rewind pointer back to start 
s3.put_object(
    Bucket=settings.AWS_S3_DEV_IMG_BUCKET, 
    Key=img_name, 
    Body=buffer, 
    ContentType='image/jpeg', 
)