使用Plone上的Dexterity,按文件类型或mimetype限制上传

时间:2013-01-03 18:39:49

标签: plone dexterity

我有一个自定义内容类型,使用灵巧构建。在架构中(下面列出了架构),我使用' plone.namedfile.field.NamedFile '作为附件/上传。

我想限制上传,以便只有mp3文件可以附加到我的内容类型。实现这一目标的最佳方法是什么?

以下是我的内容类型的完整架构/模型:

<model xmlns="http://namespaces.plone.org/supermodel/schema">
<schema>
<field name="date" type="zope.schema.Date">
<description />
<title>Date</title>
</field>
<field name="speaker" type="zope.schema.TextLine">
<description />
<title>Speaker</title>
</field>
<field name="service" type="zope.schema.Choice">
<description />
<title>Service</title>
<values>
<element>1st Service</element>
<element>2nd Service</element>
</values>
</field>
<field name="audio_file" type="plone.namedfile.field.NamedFile">
<description />
<title>Audio File</title>
</field>
</schema>
</model>

我将在这里开始搜索:http://plone.org/products/dexterity/documentation/manual/developer-manual/reference/default-value-validator-adaptors

1 个答案:

答案 0 :(得分:3)

我决定使用javascript进行第一行验证。 我的解决方案基于<input type="file"> limit selectable files by extensions

的信息

根据建议,我的脚本看起来像这样:

$(document).ready( function() {

function checkFile(event) {
        var fileElement = document.getElementById("form-widgets-audio_file-input");
        var fileExtension = "";
        if (fileElement.value.lastIndexOf(".") > 0) {
            fileExtension = fileElement.value.substring(fileElement.value.lastIndexOf(".") + 1, fileElement.value.length);
        }
        if (fileExtension == "mp3") {
            return true;
        }
        else {
            alert("You must select a mp3 file for upload");
            return false;
        }
    }

$("form#form").bind("submit",checkFile);

});

这是解决方案的一半,接下来我需要在服务器端添加验证。