这是我的项目视图,我尝试使用boto将图像从本地系统上传到s3。
class ImageList(generics.ListCreateAPIView):
queryset = Image.objects.all()
serializer_class = ImageSerializer
def post(self , request , format = None):
# import ipdb; ipdb.set_trace()
serializer = ImageSerializer(data = request.data)
if serializer.is_valid():
serializer.save()
print request.data
return Response({'received data' : request.data})
return Response(serializer.errors , status = status.HTTP_400_BAD_REQUEST)
class ImageDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Image.objects.all()
serializer_class = ImageSerializer
它适用于django admin但在我尝试使用Django Rest Framework html表单上传时会产生错误。我在基于泛型类的视图中重写了post方法。生成的错误是:
UnicodeDecodeError at /image/
'utf8' codec can't decode byte 0xff in position 15: invalid start byte
Request Method: POST
Request URL: http://127.0.0.1:8000/image/
Django Version: 1.9
Exception Type: UnicodeDecodeError
Exception Value:
'utf8' codec can't decode byte 0xff in position 15: invalid start byte
Exception Location: /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py in encode, line 210
Python Executable: /usr/bin/python
Python Version: 2.7.10
Unicode error hint
The string that could not be encoded/decoded was: "����\u
我已经尝试了几乎所有可用的堆栈溢出,但没有任何对我有用。我没有从某个地方复制代码,所以没有奇怪的字符。
作为参考,这是 models.py 文件:
class Image(models.Model):
image_meta = models.ForeignKey('Image_Meta',on_delete=models.CASCADE,)
image = models.ImageField(upload_to='images-data')
# image = models.URLField(max_length = 500)
order = models.IntegerField()
version = models.CharField(max_length=10)
def __unicode__(self):
return (self.image)
答案 0 :(得分:0)
JSON字符串是unicode字符串,而不是二进制字符串。您的图像包含二进制数据,JSON序列化程序正在抱怨这一点。
解决此问题的一种常见方法是使用base64或base85。 Python通过base64模块内置了对这两种(和其他)编码的支持。