在Python和Javascript中检查文件格式与文件名扩展是否一致?
我有一个文件上传工具,它会检查文件格式(只允许上传某些视频格式)。
但是用户可以简单地修改原文件的名称后缀,从而绕过这个检查(比如把 file.pdf
改成 file.mov
然后上传)!
现在我需要检查和验证文件的格式是否和文件后缀匹配。后台使用的是Python(Django),但我不确定这是否可以通过Python、JavaScript或其他解决方案来实现。
3 个回答
-1
在Mathias的回答基础上,如果你使用python-magic,可以这样做:
file_type = magic.from_buffer(upload.file.read(1024), mime=True)
这样做就不需要先保存文件就能获取它的mime类型。
3
如果你想用JavaScript来实现这个功能,可以获取所选文件的mime类型,并在前端进行检查。这样做的好处是,你不需要先把文件上传到服务器就能进行初步验证。根据这个链接,.mov文件的mime类型是'video/quicktime'。这个类型比单纯改文件扩展名要难修改得多。
另外,记得参考Mathias的回答。在后端服务器上验证上传的文件也是很重要的哦。:)
这里有一个使用JavaScript进行文件验证的示例。
$('#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;
}
8
在Python中,你可以使用python-magic
这个库。
以下是它的说明文档中的一句话:
python-magic是一个Python接口,用于访问libmagic这个文件类型识别库。libmagic通过检查文件的头部信息来识别文件类型,这个过程是根据一个预定义的文件类型列表进行的。
它是通过分析文件的头部信息,而不仅仅是查看文件的扩展名来识别文件类型。
使用起来很简单:
>>> import magic
>>> magic.from_file('renamed.pdf')
'ISO Media, Apple QuickTime movie'
# More handy
>>> magic.from_file('renamed.pdf', mime=True)
'video/quicktime'