【问题标题】:check if the file format is different with the file name extension in Python, Javascript?检查文件格式是否与 Python、Javascript 中的文件扩展名不同?
【发布时间】:2014-08-14 10:50:06
【问题描述】:
我有一个有文件格式验证的上传器(只能上传部分视频格式)。
但是用户可以简单地更改原始文件扩展名并通过验证(例如将file.pdf重命名为file.mov并上传)!
现在我需要检查并验证文件格式是否与文件扩展名匹配。后端是 Python (Django),但我不确定这是否可以通过 Payton、Javascript 或任何其他解决方案来完成。
【问题讨论】:
标签:
javascript
jquery
python
django
【解决方案1】:
在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'
【解决方案2】:
如果您想通过 Javascript 执行此操作,您可以获取所选文件的 mime 类型并在前端进行检查。这样做的好处是您不需要将文件上传到服务器进行初始验证。基于this,.mov 文件的 MIME 类型是“video/quicktime”。这对用户来说比更改文件扩展名更难修改。
还要注意Mathias' answer。在后端服务器中验证上传的文件也很重要。 :)
这是file validation using 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;
}
【解决方案3】:
使用 python-magic 添加到 Mathias 的答案中,您可以这样做
file_type = magic.from_buffer(upload.file.read(1024), mime=True)
这不需要保存文件来获得它的mime