我有一个上传器,它有文件格式验证(只能上传一些视频格式)。
然而用户可以简单地更改原始文件名的扩展名并通过验证(例如将file.pdf
重命名为file.mov
并上传)!
现在我需要检查和验证文件格式是否与文件扩展名匹配。后端是Python(Django),但我不确定这是否可以通过Payton、Javascript或任何其他解决方案完成。
我有一个上传器,它有文件格式验证(只能上传一些视频格式)。
然而用户可以简单地更改原始文件名的扩展名并通过验证(例如将file.pdf
重命名为file.mov
并上传)!
现在我需要检查和验证文件格式是否与文件扩展名匹配。后端是Python(Django),但我不确定这是否可以通过Payton、Javascript或任何其他解决方案完成。
python-magic
。python-magic是与libmagic文件类型识别库交互的Python接口。 libmagic通过根据预定义的文件类型列表检查其标头来识别文件类型。
它分析文件头而不仅仅使用文件扩展名来识别文件类型。>>> import magic
>>> magic.from_file('renamed.pdf')
'ISO Media, Apple QuickTime movie'
# More handy
>>> magic.from_file('renamed.pdf', mime=True)
'video/quicktime'
$('#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;
}
在Mathias的答案基础上,使用python-magic,你可以这样做
file_type = magic.from_buffer(upload.file.read(1024), mime=True)
这不需要保存文件即可获取它的 MIME 类型