Запрет пользователям загружать изображения BMP, TIFF и т. Д. В ImageField в Plone - PullRequest
4 голосов
/ 03 февраля 2012

Пользователи делают это, потому что могут.

Однако автоматическое изменение размера изображения и т. Д. Выходит из строя.

Это делает меня грустным мальчиком.

Как ограничить загрузку изображений в формате GIF, PNG и JPEG по всему миру?

  • Для архетипов

  • для ловкости

Ответы [ 3 ]

5 голосов
/ 03 февраля 2012

Используя архетипы, вы переопределяете класс контента изображения или создаете свой собственный класс контента изображения со следующей схемой.

Вы можете просто добавить строку

allowable_content_types = ('image/gif', 'image/jpeg', 'image/png'),

к вашей схеме

е

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,
             ),
    ),

Возможно, я бы использовал расширитель схемы для расширения класса Image, переопределяя это конкретное поле

http://weblion.psu.edu/services/documentation/developing-for-plone/products-from-scratch/schemaextender

1 голос
/ 20 марта 2012

В эти дни я столкнулся с подобными проблемами и обошел их так:

  • добавить пользовательский виджет, который добавляет атрибут accept к входному файлу
  • set field.swallowResizeExceptions = True таким образом, пользователи по крайней мере не получают ошибку сайта при загрузке неподдерживаемого типа изображения
  • mimetypes состояния, которые работают в описании

Определение поля выглядит следующим образом:

atapi.ImageField('image1',
    swallowResizeExceptions = True,
    widget = atapi.ImageWidget(
        label = _(u"Image 1"),
        description = _(u"Image used in listings. (JPEG, PNG and GIF are supported)"),
        show_content_type = False,
        accept = 'image/*',
        macro = 'mywidgets/myimage',
        ),
    ),

обратите внимание, что accept="image/jpeg,image/gif" был проигнорирован firefox11, хотя он должен поддерживаться в соответствии с http://www.w3schools.com/tags/att_input_accept.asp

mywidgets / myimage - настраиваемая версия архетипов / скинов / виджетов / image.pt, которая используетнастроенная версия архетипов / скинов / виджетов / file.pt

<metal:define define-macro="edit">
...
   <metal metal:use-macro="here/mywidgets/myfile/macros/file_upload"/>
...

и mywidgets / myfile.pt просто определяет этот макрос:

<metal:define define-macro="file_upload"
       tal:define="unit accessor;
                   size unit/get_size | python:unit and len(unit) or 0;">
    <input type="file"
           size="30"
           tal:attributes="name string:${fieldName}_file;
                           id string:${fieldName}_file;
                           accept widget/accept|nothing;" />
    <script type="text/javascript"
        tal:define="isDisabled python:test(accessor() and size!=0, 'true', 'false')"
            tal:content="string:document.getElementById('${fieldName}_file').disabled=$isDisabled;">
    </script>
</metal:define>
0 голосов
/ 30 июля 2013

Боковое ограничение для AT с использованием события после проверки:

check Как ограничить расширение файла изображения на Plone?

...