2016-02-29 30 views
7

私はDjango Rest Frameworkを使用しているアプリケーションで作業しています。RESTAPIを使用して画像をアップロード

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) 

serializers.py

class ImageSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Image 
     field = ('id', 'image_path' , 'order' , 'version') 

views.py

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

class ImageDetail(generics.RetrieveUpdateDestroyAPIView): 
    queryset = Image.objects.all() 
    serializer_class = ImageSerializer 

のURLパターン

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

これは、システム全体のほんの一部です。 RESTAPIを使用して画像をアップロードし、それをamazon s3にアップロードし、そこからURLを取得し、モデルImageのimage_pathフィールドに保存します。私はREST(like this)を使用してファイルをアップロードするための以前の解決策を見てきましたが、私の場合は何もできませんでした。誰かが私がそれをどうやって行うことができるか提案することができます

+0

あなたは 'ImageField'を使うべきです。これにより、実際のイメージはS3にのみ保存され、DBのフィールドには、コード内で 'image.url'を使用してアクセスできるイメージへのパスがあります。 –

+0

@SaurabhGoyal画像URLにアクセスするにはどうすればいいですか? –

+0

私はとにかくそれを得た:) –

答えて

0

を移入するためにそこにそれを処理します。 Saurabh Goyalの提案したようにimage_pathをImageFieldに変更しました。私はこのコードを使用:

AWS_S3_ACCESS_KEY_ID = "Access_key_id" 
AWS_S3_SECRET_ACCESS_KEY = "secret_access_key" 
AWS_STORAGE_BUCKET_NAME = "bucket_name" 

settings.pyにこれを追加しました::

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) 

Nはとしてlocal_settings.pyファイルのように私のAmazon S3のバケットの詳細を提供しました

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 

とvoila !!出来た。私はこれが誰かが私と同じ問題を抱えているのを助けることを願っています。

0

画像/ファイルがmultipart/form-dataを使用してアップロードされていることがわかりました。デフォルトでは、DRFはマルチパートデータを解析しません。

drpがマルチパートデータを解析するには、MultiPartParserパーサーを使用するようにDRPビューに指示する必要があります。

from rest_framework.parsers import MultiPartParser 
class ImageList(generics.ListCreateAPIView): 
    ... 
    ...  
    parser_classes = (MultiPartParser) 
    ... 

私は、画像フィールドのためにあなたのシリアライザでimagefieldを持つことをお勧めします、とまあ私は最終的にこれを行う方法を考え出したアマゾンにアップロードして、URLField

関連する問題