Django - Django 的图像字段默认支持/不支持哪些文件类型?

use*_*875 4 django file-type django-models

我看到所有这些帖子都在谈论“如何限制 Django 的图像字段仅接受某些文件类型”,但我还没有找到 Django 图像字段默认支持/不支持的所有文件类型的列表。

是否有 Django 的图像字段默认支持/不支持的文件类型列表?或者 Django 的 imagefield 是否允许提交任何文件类型?

(django 会允许用户在图像字段中上传 .pdf、.psd、.doc 等文件还是会引发错误?)

Jar*_*rad 7

我的回答年份:2020

我自己也深陷同样的问题,并且遇到了一些我认为我会分享的知识。

django.core.validators生活中的功能命名get_available_image_extensions()。试试这个。

from django.core import validators as v
v.get_available_image_extensions()
Run Code Online (Sandbox Code Playgroud)

返回:

['blp', 'bmp', 'dib', 'bufr', 'cur', 'pcx', 'dcx', 'dds', 'ps', 'eps', 'fit',
 'fits', 'fli', 'flc', 'ftc', 'ftu', 'gbr', 'gif', 'grib', 'h5', 'hdf', 'png',
 'apng', 'jp2', 'j2k', 'jpc', 'jpf', 'jpx', 'j2c', 'icns', 'ico', 'im', 'iim',
 'tif', 'tiff', 'jfif', 'jpe', 'jpg', 'jpeg', 'mpg', 'mpeg', 'mpo', 'msp',
 'palm', 'pcd', 'pdf', 'pxr', 'pbm', 'pgm', 'ppm', 'pnm', 'psd', 'bw', 'rgb',
 'rgba', 'sgi', 'ras', 'tga', 'icb', 'vda', 'vst', 'webp', 'wmf', 'emf', 'xbm',
 'xpm']
Run Code Online (Sandbox Code Playgroud)

函数本身尝试使用PIL. 这是它的所有荣耀:

def get_available_image_extensions():
    try:
        from PIL import Image
    except ImportError:
        return []
    else:
        Image.init()
        return [ext.lower()[1:] for ext in Image.EXTENSION]
Run Code Online (Sandbox Code Playgroud)

相关函数validate_image_file_extension(value)用于get_available_image_extensions()确定allowed_extensions关键字参数。

这里的功能是:

def validate_image_file_extension(value):
    return FileExtensionValidator(allowed_extensions=get_available_image_extensions())(value)
Run Code Online (Sandbox Code Playgroud)

希望这能回答以下问题:

是否有 Django 的图像字段默认支持/不支持的文件类型列表?


knb*_*nbk 4

DjangoImageField需要第三方包 Pillow(或 PIL,但不推荐使用支持)。它依赖于这些包来验证文件确实是图像。这不依赖于文件扩展名,而是依赖于文件本身的内容。

如果您想知道是否支持某种类型的文件,您应该找出您使用的 Pillow/PIL 版本,并查看相应的文档。

  • 这是一个非常不完整的答案。第一,PIL/Pillow 的文档很糟糕。ReadTheDocs 上 Pillow 只有两个版本:1.7.8 和“最新”。此外,它并不像这样简单:例如,Pillow 2.5.1 文档将“.psd”列为“只读”格式,但在 2.4.0 中打开“.psd”文件会导致“无法识别”图像”`IOError`。 (2认同)