2017-02-03 1 views
1

私は私のためにファイルのアップロードを処理するコードの一部を持って、理想的に私は、テキストファイルのみを受け入れるようにしたい(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でてきました。これら2つの違いは何ですか?ファイルがテキストファイルであるかどうかを確認する「グローバル」な方法はありますか?

答えて

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 
+0

うに受け入れるようにこれを処理する適切な方法をバイナリファイルとテキストファイルの両方?私は技術的に別のMIMEタイプとしてアプリケーション/オクテットストリームを追加することができるので、私はこれを尋ねます –

+0

あなたがそのルートを下ったら、両方を受け入れ、後にそれらをテストする必要があります。私はgtkからMIMEtypes appartについてよく分かりませんが、100%信頼できるとは思われません。 –

関連する問題