我想这是要做到这一点最干净和最简单的办法。
以下是如何在基于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