我想這是要做到這一點最乾淨和最簡單的辦法。
以下是如何在基於Django(drf也)API端的post請求中處理Base64編碼的圖像文件,並將其保存爲ImageField。
讓說你有一個型號如下:
Class MyImageModel(models.Model):
image = models.ImageField(upload_to = 'geo_entity_pic')
data=model.CharField()
所以相應的串行器將如下:
from drf_extra_fields.fields import Base64ImageField
Class MyImageModelSerializer(serializers.ModelSerializers):
image=Base64ImageField()
class meta:
model=MyImageModel
fields= ('data','image')
def create(self, validated_data):
image=validated_data.pop('image')
data=validated_data.pop('data')
return MyImageModel.objects.create(data=data,image=image)
相應的視圖可以如下:
elif request.method == 'POST':
serializer = MyImageModelSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=201)
return Response(serializer.errors, status=400)
注意在串行器中,我已經使用了模塊中提供的Base64ImageField的實現
要安裝該模塊運行命令
pip install pip install django-extra-fields
導入相同,完成!
將您的圖像作爲JSON對象中的Base64編碼字符串以及您擁有的任何其他數據發送(通過post方法)。
我試圖按照同樣的辦法,雖然我得到「不正確的填充」的解碼。任何建議? – Mutant 2013-10-30 15:24:57
是的,你不想包括最初的數據:image/gif; base64,但是我猜你現在可能知道,就像我那樣通過Google來到這裏的人。 – 2014-02-28 04:38:13
我認爲這可能會失敗,因爲你不需要包含'data:image/*; base64'文件的一部分。 – 2017-04-20 01:21:29