我正在使用Django-rest Framework进行一个项目,我将该图像从本地系统上传到amazon s3。我正在使用Html表单,它工作正常。
这是模特图片。
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)
我想知道我该怎么做。我试图在本地系统中为图像字段输入文件的位置而没有任何成功。
我在这里做错了什么,或者我在这里错过了什么?
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')
答案 0 :(得分:1)
在你的api视图课程中使用
parser_classes = (FileUploadParser, MultiPartParser)
您上传的文件在request.data字典中以文件对象的形式提供,密钥为' file'。
您的前端客户端将在密钥"文件"。
中发送文件数据在此处详细了解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。