2

S3Boto3Storage を使用してドキュメントを aws s3 に保存し、easy-thumbnails を使用してサムネイル画像を生成しようとしました。以下のコードを見つけてください。

モデルクラス

class ThumbnailTestModel(models.Model):
    sample1 = models.FileField(
        storage=S3Boto3Storage(),
        help_text="Field to store the sample document of Professional",
        null=True,
        blank=True,
        upload_to=s3_professional_sample_storage_path)
    sample1_file_name = models.CharField(blank=True,null=True,max_length=1000, default=True)

クラスを見る

class ThumbnailTestModelView(mixins.CreateModelMixin, mixins.ListModelMixin,
            mixins.UpdateModelMixin, viewsets.GenericViewSet):
queryset = ThumbnailTestModel.objects.all()
permission_classes = (AllowAny, )
serializer_class = ThumbnailSerializer

そしてシリアライズ

class ThumbnailSerializer(serializers.ModelSerializer):
sample1 = serializers.FileField(read_only=True, required=False, allow_null=True)
sample1_base64 = serializers.CharField(write_only=True, required=False, allow_null=True)
sample1_thumbnail = serializers.SerializerMethodField(required=False, read_only=True, allow_null=True)

class Meta:
    model = ThumbnailTestModel
    fields = ['id','sample1', 'sample1_file_name', 'sample1_base64', 'sample1_thumbnail']

def validate(self, validated_data):
    validated_data = super(ProductProfessionalSerializer,
                           self).validate(validated_data)
    sample1_base64 = validated_data.pop('sample1_base64', None)
    if sample1_base64:
        validated_data['sample1'] = ContentFile(
            base64.b64decode(sample1_base64),
            name=validated_data["sample1_file_name"])

def get_sample1_thumbnail(self, instance):
    return AWS_URL + get_thumbnailer(instance.sample1)['avatar'].url

ここに私が得る応答があります

[{"id":5,"sample1":" https://wizcounsel-dev.s3.amazonaws.com/sample_document/None/add_team_2.png ","sample1_file_name":"add_team_2.png","sample1_thumbnail": " https://wizcounsel-dev.s3.amazonaws.com/sample_document/None/add_team_2.png.150x100_q85_crop.png "}]

ただし、生成されたサムネイル URL にアクセスすると、アクセス拒否エラーが返されます。同じフォルダ内のすべてのオブジェクトは実際には公開されています。AWS フォルダを調べると、サムネイル ファイルがないようです。

私はDjangoを初めて使用するため、質問が素朴に見えるかもしれません、ありがとう

4

1 に答える 1