防止用户将BMP、TIFF等图像上载到Plone中的ImageField

防止用户将BMP、TIFF等图像上载到Plone中的ImageField,plone,archetypes,dexterity,Plone,Archetypes,Dexterity,用户这样做是因为他们可以 但是,图像自动调整大小等故障 这使我成为一个悲伤的男孩 如何将图像上传限制为GIF、PNG和JPEG站点范围 原型 灵巧 使用原型,您可以覆盖图像内容类或使用以下模式创建自己的自定义图像内容类 你只需要加一行就行了 allowable_content_types = ('image/gif', 'image/jpeg', 'image/png'), 到您的模式 即 我可能会使用模式扩展程序来扩展Image类,覆盖该特定字段 这些天我遇到了类似的问题,并像这样解决了这

用户这样做是因为他们可以

但是,图像自动调整大小等故障

这使我成为一个悲伤的男孩

如何将图像上传限制为GIF、PNG和JPEG站点范围

  • 原型

  • 灵巧


使用原型,您可以覆盖图像内容类或使用以下模式创建自己的自定义图像内容类

你只需要加一行就行了

allowable_content_types = ('image/gif', 'image/jpeg', 'image/png'),
到您的模式

我可能会使用模式扩展程序来扩展Image类,覆盖该特定字段


这些天我遇到了类似的问题,并像这样解决了这些问题:

  • 添加一个自定义小部件,向文件输入添加
    accept
    属性
  • 设置
    field.燕子ResizeExceptions=True
    ,这样用户在上传未经支持的图像类型时至少不会出现站点错误
  • 说明在描述中工作的mimetype
字段定义如下所示:

atapi.ImageField('image1',
TownResizeExceptions=True,
widget=atapi.ImageWidget(
标签=u(图像1”),
description=u(列表中使用的图像(支持JPEG、PNG和GIF)”,
显示内容类型=假,
accept='image/*',
宏='mywidgets/myimage',
),
),
请注意,firefox11忽略了
accept=“image/jpeg,image/gif”
虽然它应该根据

mywidgets/myimage是archetypes/skins/widgets/image.pt的自定义版本,它使用archetypes/skins/widgets/file.pt的自定义版本


...
...
mywidgets/myfile.pt只是定义了这个宏:


AT使用验证后事件的侧向限制:


检查

允许任何类型的图像,并使用转换来进行imagemagick,将BMP转换为PNG,不是更有用吗?我有点惊讶这不是自动的。AT的横向限制:检查抱歉,必须将此答案取消标记为正确。由于某些原因,正在忽略允许的内容类型。普隆3.3。这也是ATImage的默认值。只要看到它是stackoverflow链接。。。如果问题是完全重复的,则应将其标记为(是吗?)否则,答案可能不适合此问题:-)答案适合原型部分,但不适合灵巧性。
MyImageSchema = schemata.ATContentTypeSchema.copy() + atapi.Schema((
        ImageField('image',
            required = False,
            allowable_content_types = ('image/gif', 'image/jpeg', 'image/png'),
            storage=AttributeStorage(),
            sizes= {'large'   : (768, 768),
                   'preview' : (400, 400),
                   'mini'    : (200, 200),
                   'thumb'   : (128, 128),
                   'tile'    :  (64, 64),
                   'icon'    :  (32, 32),
                   'listing' :  (16, 16),
                  },
          widget = ImageWidget(
                     label=_(u"Image"),
                     show_content_type=False,
             ),
    ),