Django Rest框架图像验证
我有一个表单,它通过Django Rest框架发送图像。序列化程序如图所示:Django Rest框架图像验证,django,django-rest-framework,Django,Django Rest Framework,我有一个表单,它通过Django Rest框架发送图像。序列化程序如图所示: class AvatarSerializer(serializers.ModelSerializer): avatar = Base64ImageField(validators=[image_validation]) class Meta: model = Profile fields = ('avatar',) 我还进行了图像验证,检查图像大小,使其不超过12MB
class AvatarSerializer(serializers.ModelSerializer):
avatar = Base64ImageField(validators=[image_validation])
class Meta:
model = Profile
fields = ('avatar',)
我还进行了图像验证,检查图像大小,使其不超过12MB:
def image_validation(image):
# 12MB
MAX_FILE_SIZE = 12000000
print(image.name)
if image.size > MAX_FILE_SIZE:
print(image.size)
raise ValidationError("File size too big!")
当我试图上传大于12mb的图像时,图像大小会被打印出来,但是,我在Chrome的网络选项卡中得到了这样的响应:
未能加载响应数据
我了解到这可能是因为图像的大小(我试图上传30mb的图像)。不会显示ValidationError
,用户会收到一个500服务器错误。如何解决此问题?序列化程序具有字段级验证功能,可在返回前验证属性
每个请求都有服务器超时。如果请求花费太多时间,它将杀死并返回500个内部错误,然后再进入序列化程序。@user2896120您是否在使用
django额外字段作为Base64ImageField
?@Mirza715如何使它在花费太多时间时返回有效错误?@funnydman我正在使用Base64ImageField
@user2896120请参见此。在旁注中,请在将文件上传到服务器之前尝试压缩文件。使用此选项后,我可以知道您会遇到什么错误。您需要在validate_avatar func中返回图像,除非您将获得avatar字段的空值,
class AvatarSerializer(serializers.ModelSerializer):
avatar = Base64ImageField()
def validate_avatar(self, image):
# 12MB
MAX_FILE_SIZE = 12000000
print(image.name)
if image.size > MAX_FILE_SIZE:
print(image.size)
raise ValidationError("File size too big!")
class Meta:
model = Profile
fields = ('avatar',)