是什么决定了文件应该是application / octet-stream还是text / plain?

时间:2017-02-03 17:17:57

标签: python mime

我有一段代码可以为我处理文件上传,理想情况下我只想接受文本文件(csv,制表符分隔文件等)所以我添加了这段代码:

mimetype = magic.from_buffer(request.FILES['docfile'].read(512), mime=True)
if form.is_valid() and mimetype == 'text/plain':
     ....

就在最近我的一位用户试图上传文本文件而系统拒绝了该文件,该文件的mime是:

file --mime-type -b input_file.txt 
application/octet-stream

当然,所有以前上传的文件都是text / plain。这两者之间的区别是什么?是否有更多"全球"检查文件是否是文本文件的方法?

1 个答案:

答案 0 :(得分:0)

我发现这可能与answer相关:

  

另一种方法based on file(1) behavior

textchars = bytearray({7,8,9,10,12,13,27} | set(range(0x20, 0x100)) - {0x7f})
is_binary_string = lambda bytes: bool(bytes.translate(None, textchars))
     

示例:

is_binary_string(open('/usr/bin/python', 'rb').read(1024))
True
is_binary_string(open('/usr/bin/dh_python3', 'rb').read(1024))
False