5

次の行を含むアプリケーションを使用しています。

ACCEPT_FILE_TYPES = re.compile('image/(gif|p?jpeg|(x-)?png)')

明らかに、指定された拡張子の画像へのアップロードを制限します。しかし、私はこれらのフォーマットをアップロードするためにそれを使用する予定です (おそらくそれ以上)

  • Microsoft Office ファイル(.doc、.docx、.xls、.xlsx など)
  • アドビリーダー(.pdf)
  • おそらくアーカイブ(.rar、.zip、.7z)

次の形式に書き換える必要があると思います。

ACCEPT_FILE_TYPES = re.compile('/(docx?|xlsx?|pdf|rar|zip|7z)')

どんな助けでも大歓迎です。

4

2 に答える 2

4

これらは、一致させようとしているファイル拡張子ではなく、MIME タイプです。

一般的な画像形式の MIME タイプは非常に単純です。たとえば、次のようになります。

image/png
image/jpeg
image/gif

しかし、他のほとんどのタイプはそうではなく、代わりに次のような MIME タイプを使用しています。

.pdf    application/pdf

.doc    application/msword
.xls    application/vnd.ms-excel

.rar    application/x-rar-compressed
.7z     application/x-7z-compressed
.zip    application/zip

.xlsx   application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xltx   application/vnd.openxmlformats-officedocument.spreadsheetml.template
.potx   application/vnd.openxmlformats-officedocument.presentationml.template
.ppsx   application/vnd.openxmlformats-officedocument.presentationml.slideshow
.pptx   application/vnd.openxmlformats-officedocument.presentationml.presentation
.sldx   application/vnd.openxmlformats-officedocument.presentationml.slide
.docx   application/vnd.openxmlformats-officedocument.wordprocessingml.document
.dotx   application/vnd.openxmlformats-officedocument.wordprocessingml.template

注: これらは、それぞれのファイル形式で最も一般的に使用される MIME タイプのみです。IANA は MIME タイプを登録するための正式な機関ですが、実際には、それらを使用するプログラム (メール クライアント、ブラウザー、Web サーバーなど) に応じて、さまざまなバリエーションに遭遇します。

したがって、正規表現を使用してそれらを一致させるべきではありませんが、代わりに、許可された MIME タイプのレジストリを維持する必要があります (単純な Python リスト、またはバリアントを本当に確認して説明したい場合は辞書にすることができます)。

MIMEタイプについて調べ、IANA MIME メディア タイプのリストを登録済みの MIME タイプの信頼できるソースとして確認し、Pythonmimetypesモジュールを使用してファイル拡張子またはその逆で MIME タイプを検索します。

于 2012-09-30T17:50:19.367 に答える
0

この関数は、指定された URI が有効な MIME タイプのファイルに対応するかどうかを評価します。

import mimetypes

a = 'http://www.cwi.nl:80/%7Eguido/Python.html'
b = '/data/Python.txt'
c = 532
d = u'dkakasdkjdjakdjadjfalskdjfalk'
e = u'http://tobeclever.ru/download/martin_george_a_game_of_thrones.pdf'

# The optional strict argument is a flag specifying whether the list
# of known MIME types is limited to only the official types registered
# with IANA. When strict is True (the default), only the IANA types are
# supported; when strict is False, some additional non-standard but commonly
# used MIME types are also recognized.

def mimetype_validator(x):
    try:
        (guessed_type, encoding_guessed) = mimetypes.guess_type(x, strict=True)
        return True if guessed_type in mimetypes.types_map.values() else False
    except:
        return False

print mimetype_validator(a)
print mimetype_validator(b)
print mimetype_validator(c)
print mimetype_validator(d)
print mimetype_validator(e)

与えます:

True
True
False
False
True
于 2016-06-24T21:31:44.690 に答える