我有一段代码可以为我处理文件上传,理想情况下我只想接受文本文件(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。这两者之间的区别是什么?是否有更多"全球"检查文件是否是文本文件的方法?
答案 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