检查文件格式是否与Python中的文件扩展名不同,Javascript?

时间:2014-08-14 10:50:06

标签: javascript jquery python django

我有一个上传器,它有文件格式验证(只能上传一些视频格式)。

但是,用户只需更改原始文件扩展名并通过验证(例如将file.pdf重命名为file.mov并上传)!

现在我需要检查并验证文件格式是否与文件扩展名匹配。后端是Python(Django),但我不确定是否可以通过Payton,Javascript或任何其他解决方案来完成。

3 个答案:

答案 0 :(得分:8)

在python中,您可以使用python-magic

引用自述文件:

python-magic is a python interface to the libmagic file type identification library. libmagic identifies file types by checking their headers according to a predefined list of file types.

它分析文件头而不是仅使用文件扩展名来识别文件类型。

用法很简单:

>>> import magic
>>> magic.from_file('renamed.pdf')
'ISO Media, Apple QuickTime movie'
# More handy
>>> magic.from_file('renamed.pdf', mime=True)
'video/quicktime'

答案 1 :(得分:3)

如果您想通过Javascript执行此操作,您可以获取所选文件的mime类型并在前端进行检查。这样做的好处是您无需将文件上传到服务器进行初始验证。根据{{​​3}},.mov文件的mime类型为“ video / quicktime ”。用户修改比修改文件扩展名要困难得多。

另请注意this。在后端服务器中验证上传的文件也很重要。 :)

以下是Mathias' answer的演示。

$('#movieFile').change(function() {
    var file = $('#movieFile')[0].files[0];

    var filename = file.name;
    var fileMimeType = file.type;
    var fileExtension = filename.split('.').pop();

    if (isValidMimeType(fileMimeType)) {
        console.log('good file');
    } else {
        console.log('bad file');
    }
});

function isValidMimeType(fileMimeType) {
    // mime type of .mov files
    var validFileMimeTypes = [ 'video/quicktime' ];

    for (var i = 0; i < validFileMimeTypes.length; i++) {
        if (validFileMimeTypes[i].toLowerCase() === fileMimeType.toLowerCase()) {
            return true;
        }
    }
    return false;
}

答案 2 :(得分:-1)

使用python-magic添加到Mathias的答案,你可以这样做

file_type = magic.from_buffer(upload.file.read(1024), mime=True)

这不需要保存文件来获取它的mime