使用RESTAPI上传图像

the*_*rit 7 python django amazon-s3 django-rest-framework

我正在使用Django Rest Framework处理应用程序.

models.py

class Image(models.Model):
    image_meta = models.ForeignKey('Image_Meta',on_delete=models.CASCADE,)
    image_path = models.URLField(max_length=200)
    order = models.IntegerField()
    version = models.CharField(max_length=10)
Run Code Online (Sandbox Code Playgroud)

serializers.py

class ImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Image
        field = ('id', 'image_path' , 'order' , 'version')
Run Code Online (Sandbox Code Playgroud)

views.py

class ImageList(generics.ListCreateAPIView):
    queryset = Image.objects.all()
    serializer_class = ImageSerializer

class ImageDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Image.objects.all()
    serializer_class = ImageSerializer
Run Code Online (Sandbox Code Playgroud)

网址模式

url(r'^image/$',views.ImageList.as_view(),name='image_list'),
url(r'^image/(?P<pk>[0-9]+)/$',views.ImageDetail.as_view(),name='image_detail')
Run Code Online (Sandbox Code Playgroud)

这只是整个系统的一部分.我想使用RESTAPI上传图像,然后将其上传到amazon s3,然后从那里获取url并将其存储在模型Image 的image_path字段中.我已经看到以前使用REST上传文件的解决方案(像这样),但对我的情况没有任何作用.有人可以建议我该怎么做?

the*_*rit 0

好吧,我终于想出了如何做到这一点。我按照 Saurabh Goyal 的建议将 image_path 更改为 ImageField。我使用了这段代码:

class Image(models.Model):
    image_meta = models.ForeignKey('Image_Meta',on_delete=models.CASCADE,)
    image_path = models.ImageField(upload_to='images-data')
    order = models.IntegerField()
    version = models.CharField(max_length=10)
Run Code Online (Sandbox Code Playgroud)

N 提供了我的 amazon s3 存储桶详细信息,如local_settings.py文件中所示:

AWS_S3_ACCESS_KEY_ID = "Access_key_id"
AWS_S3_SECRET_ACCESS_KEY = "secret_access_key"
AWS_STORAGE_BUCKET_NAME = "bucket_name"
Run Code Online (Sandbox Code Playgroud)

并将其添加到settings.py

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
Run Code Online (Sandbox Code Playgroud)

瞧!有效。我希望这可以帮助那些遇到与我同样问题的人。