2016-03-09 3 views
1

Я использую Django-rest Framework для проекта, в котором я загружаю изображения на amazon s3 из своей локальной системы. Это я использую Html-форму, которая отлично работает. enter image description hereЗагрузка изображений в виде исходных данных в рамки django rest

Это образ модели.

models.py

class Image(models.Model): 
    image_meta = models.ForeignKey('Image_Meta',on_delete=models.CASCADE,) 
    image = models.ImageField(upload_to='images-data') 
    order = models.IntegerField() 
    version = models.CharField(max_length=10) 

Но когда я пытаюсь загрузить изображение в качестве исходных данных я получаю сообщение об ошибке. enter image description here

Я хочу знать, как я могу это сделать. Я попытался ввести местоположение файла в локальной системе для поля изображения без каких-либо успехов.

Что я делаю неправильно здесь или я чего-то не хватает?

views.py файл ниже:

class ImageList(APIView): 
    parser_classes = (JSONParser,) 

    def get(self, request, format=None): 
     images = Image.objects.all() 
     serializer = ImageSerializer(images, many=True) 
     return Response(serializer.data) 

    def post(self, request, format=None): 
     serializer = ImageSerializer(data=request.data , files=request.FILES) 
     print serializer 
     if serializer.is_valid(): 
      serializer.save() 
      return Response({'received data': request.data}) 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

serializer.py

class ImageSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Image 
     field = ('id', 'image_path' , 'order' , 'version') 

ответ

1

В вашем апи использовании вид класса

parser_classes = (FileUploadParser, MultiPartParser) 

Загруженный файл будет доступен как файл-файл в словаре request.data с ключом как «fi ле».

Ваш клиент будет отправлять данные файла в ключевой файл.

Подробнее о FileUploadParser здесь: http://www.django-rest-framework.org/api-guide/parsers/#fileuploadparser

пример кода:

class FileUploadApiView(views.APIView): 


    def post(self, request, *args, **kwargs): 
     form = ImageForm(request.data) 
     if form.is_valid(): 
      image = form.save(commit=False) 
     else: 
      return Response(form.errors, status_code=status.HTTP_400_BAD_REQUEST) 
     if request.data.get('file'): 
      image_file_obj = request.data.get('file') 
      # do something with file 
      image_path = save_on_s3(image) 
      image.image = image_path 
      image.save() 
      serializer = ImageSerializer(image) 
      return Response(serializer.data, status=status.HTTP_200_OK) 
     else: 
      return Response(dict(error="no image uploaded"), status_code=status.HTTP_400_BAD_REQUEST) 

Вот в модели я взял изображение поля как поля пути, а не как ImageField.

+0

Не могли бы вы продумать его или показать его кодом? –

+0

Я отредактировал код и добавил представления. Теперь я привязан к чему-то другому. Можете ли вы посмотреть на это? @ zaphod100.10 –

+0

Какая ошибка вы получаете? Имеют ли доступ к файловым объектам? –

Смежные вопросы