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

时间:2014-07-13 23:03:39

标签: django file-type django-models

我看到所有这些帖子都谈到'如何限制Django的imagefield只接受某些文件类型',但我还没有找到Django的imagefield支持/默认不支持的所有文件类型的列表。 / p>

是否存在Django的imagefield支持/默认不支持的文件类型列表?或者Django的imagefield是否允许提交任何文件类型?

(django会允许用户在图片领域上传.pdf,.psd,.doc等文件,还是会引发错误?)

3 个答案:

答案 0 :(得分:3)

我的回答年度: 2020

我本人也深陷于同样的问题,并且遇到了一些我认为自己会分享的经验。

django.core.validators中存在一个名为get_available_image_extensions()的函数。试试看。

from django.core import validators as v
v.get_available_image_extensions()

返回:

['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']

该函数本身尝试使用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]

相关函数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)

希望这能回答以下问题:

是否存在Django的imagefield支持的文件类型列表/ 默认情况下不支持?

答案 1 :(得分:2)

Django' ImageField需要第三方软件包Pillow(或PIL,但不支持支持)。它依赖于这些包来验证文件确实是一个图像。这不取决于文件扩展名,而是取决于文件本身的内容。

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

答案 2 :(得分:1)

在编写Django应用程序以上传图像时遇到了同样的问题。尝试上传DNG照片时出现表格错误。错误文字为:

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

在阅读了SO并进行了更深入的研究之后,我发现Pillow的文档涉及图像文件格式here(版本3.0.0)。

看来错误文本只是Pillow以及Django支持的文件类型的列表。如果他们列出了不支持的格式,那就太好了。

要解决需要上传不支持的格式的问题,我只使用了FileField,并且在查看功能中,应用程序检查了文件扩展名,以确保它适合我定义的扩展名列表(包括DNG)。