如何修改 django ImageField 以接受 svg 文件
how to modify django ImageField to accept svg files
我在后端使用 django rest 框架(版本 3.12.2),在前端使用 React/Next js。
我的目标很简单,我想将图片上传到 photo_main 字段。
不幸的是,我在尝试上传 svg 图像时收到一条错误消息(png、jpg 和 jpeg 都可以正常工作)
错误消息
{"photo_main":["Upload a valid image. The file you uploaded was either not an image or a corrupted image."]}
模特
class Recipe(models.Model):
id = models.UUIDField(
primary_key=True,
default=uuid.uuid4,
editable=False,
)
author = models.ForeignKey(get_user_model() , on_delete=models.CASCADE, null=True, related_name='author')
photo_main = models.ImageField(upload_to='media/', blank=True)
title = models.CharField(max_length=150)
description = models.TextField(blank=True)
提前致谢
所以在浏览论坛后我找到了解决方案:
validators.py
import os
from django.core.exceptions import ValidationError
def validate_file_extension(value):
ext = os.path.splitext(value.name)[1] # [0] returns path+filename
valid_extensions = ['.jpg', '.jpeg', '.png', '.svg']
if not ext.lower() in valid_extensions:
raise ValidationError('Unsupported file extension.')
models.py
from django.core.validators import validate_image_file_extension
image = models.ImageField('Image', upload_to=image_upload_path, validators=[validate_file_extension])
我在后端使用 django rest 框架(版本 3.12.2),在前端使用 React/Next js。
我的目标很简单,我想将图片上传到 photo_main 字段。
不幸的是,我在尝试上传 svg 图像时收到一条错误消息(png、jpg 和 jpeg 都可以正常工作)
错误消息
{"photo_main":["Upload a valid image. The file you uploaded was either not an image or a corrupted image."]}
模特
class Recipe(models.Model):
id = models.UUIDField(
primary_key=True,
default=uuid.uuid4,
editable=False,
)
author = models.ForeignKey(get_user_model() , on_delete=models.CASCADE, null=True, related_name='author')
photo_main = models.ImageField(upload_to='media/', blank=True)
title = models.CharField(max_length=150)
description = models.TextField(blank=True)
提前致谢
所以在浏览论坛后我找到了解决方案:
validators.py
import os
from django.core.exceptions import ValidationError
def validate_file_extension(value):
ext = os.path.splitext(value.name)[1] # [0] returns path+filename
valid_extensions = ['.jpg', '.jpeg', '.png', '.svg']
if not ext.lower() in valid_extensions:
raise ValidationError('Unsupported file extension.')
models.py
from django.core.validators import validate_image_file_extension
image = models.ImageField('Image', upload_to=image_upload_path, validators=[validate_file_extension])