我有一段代码可以为我处理文件上传,理想情况下我只想接受文本文件(csv、制表符分隔文件等),所以我添加了这段代码:
mimetype = magic.from_buffer(request.FILES['docfile'].read(512), mime=True)
if form.is_valid() and mimetype == 'text/plain':
....
Run Code Online (Sandbox Code Playgroud)
就在最近,我的一位用户尝试上传一个文本文件,但系统拒绝了它,该文件的 mime 是:
file --mime-type -b input_file.txt
application/octet-stream
Run Code Online (Sandbox Code Playgroud)
当然,之前上传的所有文件都是文本/纯文本。这两者有什么区别?是否有更“全局”的方法来检查文件是否是文本文件?
我发现这个答案可能是相关的:
另一种基于 file(1) 行为的方法:
Run Code Online (Sandbox Code Playgroud)textchars = bytearray({7,8,9,10,12,13,27} | set(range(0x20, 0x100)) - {0x7f}) is_binary_string = lambda bytes: bool(bytes.translate(None, textchars))例子:
Run Code Online (Sandbox Code Playgroud)is_binary_string(open('/usr/bin/python', 'rb').read(1024)) True is_binary_string(open('/usr/bin/dh_python3', 'rb').read(1024)) False
| 归档时间: |
|
| 查看次数: |
3372 次 |
| 最近记录: |