Django、Pillow、NotImplementedError - 绝对路径

Django, Pillow, NotImplementedError - absolute paths

我正在将调整大小后的用户头像上传到 S3。我的ModelForm如下:

class UserAvatarForm(forms.ModelForm):
    x = forms.FloatField(widget=forms.HiddenInput())
    y = forms.FloatField(widget=forms.HiddenInput())
    width = forms.FloatField(widget=forms.HiddenInput())
    height = forms.FloatField(widget=forms.HiddenInput())

    class Meta:
        model = UserProfile
        fields = ('id', 'img', 'x', 'y', 'width', 'height')

    def save(self, *args, **kwargs):
        photo = super(UserAvatarForm, self).save()

        x = self.cleaned_data.get('x')
        y = self.cleaned_data.get('y')
        w = self.cleaned_data.get('width')
        h = self.cleaned_data.get('height')

        image = Image.open(photo.img)
        cropped_image = image.crop((x, y, w+x, h+y))
        resized_image = cropped_image.resize((200, 200), Image.ANTIALIAS)
        resized_image.save(photo.img.path)

        return photo

NotImplementedError at /profile/avatar/ This backend doesn't support absolute paths.

我看到我可以编辑保存方法以使用 File Storage API,但我不知道如何实现它。有什么帮助吗?谢谢

这使它起作用;我会把它留在这里供将来参考:

def save(self, *args, **kwargs):
    photo = super(UserAvatarForm, self).save()

    x = self.cleaned_data.get('x')
    y = self.cleaned_data.get('y')
    w = self.cleaned_data.get('width')
    h = self.cleaned_data.get('height')

    image = Image.open(photo.img)
    cropped_image = image.crop((x, y, w+x, h+y))
    resized_image = cropped_image.resize((200, 200), Image.ANTIALIAS)
    storage_path = storage.open(photo.img.name, "wb")
    resized_image.save(storage_path, 'png')
    storage_path.close()

    return photo