2017-08-08 503 views
0

我想通过django rest框架api将图片上传到我的django网站。 但我得到这个错误Django Rest Framework:上传图片API

{ “细节”: “多重表单解析错误 - 在多无效的边界:无”}

views.py

class UploadPhotoViewSet(APIView): 
    parser_classes = (parsers.MultiPartParser, parsers.FormParser) 

    def get(self, request, format=None): 
     model_object = Photo.objects.all() 
     serializer = PhotoSerializer(model_object, many=True) 
     return Response(serializer.data) 

    def post(self, request, format=None): 
     serializer = PhotoSerializer(data=request.data) 

     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data) 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

串行.py

class PhotoSerializer(serializers.ModelSerializer): 
    thumbnail = serializers.ImageField(use_url=True) 
    source = serializers.ImageField(use_url=True) 
    class Meta: 
     model = Photo 
     fields = '__all__' 

model.py

class Photo(models.Model): 
    type = models.CharField(max_length=100, default='photo', editable=False) 
    project = models.ForeignKey(Project, on_delete=models.CASCADE) 
    title = models.CharField(max_length=100) 
    description = models.TextField() 
    category = models.CharField(max_length=255) 

    def upload_thumb_dir(self, filename): 
     path = '/media/{}/photos/thumbs/{}'.format(self.project.id, filename) 
     return path 
    thumbnail = models.ImageField(upload_to=upload_thumb_dir, default='/default/photo.png', blank=True) 

    def upload_photo_dir(self, filename): 
     path = '/media/{}/photos/{}'.format(self.project.id, filename) 
     return path 
    source = models.ImageField(upload_to=upload_photo_dir) 

    def __str__(self): 
     return self.title 

enter image description here

+0

您上传图片的方式如何?通过一些JS框架? –

+0

我正在使用HTTPie - 命令行HTTP客户端,它的工作正常用于更新文本,读取图像但不上载图像 –

回答

1

我使用curl和httpie浪费大量的时间。 最好和简单的方法是使用python requests

我发现这种方式使用Django Rest Framework命令行上传图像。

import requests 
files = {'thumb': open('D:/thumb.jpg', 'rb'), 'preview': open('D:/preview.jpg', 'rb')} 
r = requests.put('/path/to/your/django/rest/api', data={'key': value, 'key2': 'value2'}, files=files) 
print r.status_code 

如果你得到201,意味着你完成了。