【发布时间】:2016-10-25 12:37:47
【问题描述】:
我正在尝试上传带有一些表单数据的文件。为了测试我的 api,我正在使用 Postman。当我尝试使用文件和其他字段进行 POST 时,我收到了这个错误
{
"detail": "JSON parse error - 'utf-8' codec can't decode byte 0xbf in position 10: invalid start byte"
}
这是我的模型:
class Music(models.Model):
album = models.ForeignKey(Album, related_name='tracks')
playlist = models.ForeignKey(Playlist, null=True, related_name='tracks')
name = models.CharField(max_length=200, unique=True)
dropbox_id = models.CharField(max_length=500, null=True)
favorite = models.BooleanField(default=False)
created_at = models.DateField(auto_now_add=True)
counter = models.IntegerField(default=0)
序列化器:
class MusicSerializer(serializers.ModelSerializer):
file = serializers.FileField(required=True)
class Meta:
model = Music
fields = ('id', 'favorite', 'created_at', 'counter', 'file', 'name', 'album', 'playlist')
并查看:
class MusicViewSet(viewsets.ModelViewSet):
queryset = Music.objects.all()
serializer_class = MusicSerializer
def perform_create(self, serializer):
file_obj = self.request.FILES['file']
dbx = dropbox.Dropbox(JSON_DATA['dropbox_access_token'])
res = dbx.files_upload(file_obj, '/', autorename=True, mute=True)
print(res)
serializer.save(dropbox_id='x')
【问题讨论】:
-
你是否在 HEADER 中设置了“content-type: application/json”?
-
当然可以。共有三个标头:Authorization、Accept 和 Content-Type
-
不需要内容类型。删除它然后检查。
-
你能显示请求吗?我怀疑您无法按照您尝试的方式上传文件...也可以作为起点查看:gist.github.com/yprez/7704036
-
Json 不能用于发送直接文件,您应该发送
multipart/form-data内容类型的数据。此外,如果未在设置中指定,则需要在parser_classes中指定MultiPartParserViewSet。
标签: django django-rest-framework