メモリを使用しているので、私は実際にはread()
の操作を恐れています。たとえば、誰も1GBのファイルをアップロードして自分のサーバーをDDoSできますか?アップロードファイルのサイズをbottlepyで安全に確認するには?
name = request.forms.get('name')
data = request.files.get('data')
if name and data.file:
raw = data.file.read() # This is dangerous for big files
filename = data.filename
return "Hello %s! You uploaded %s (%d bytes)." % (name, filename, len(raw))
アップロードされたファイルサイズを取得する安全な方法はありますか? 1つは、ファイルシステムからファイルサイズを取得することです。 request.files.get('data')
はおそらくtempファイルのどこかに格納されていますか?
apacheのようなものの下でwsgi経由でbottleを実行すると、apacheはアップロードサイズを制限できます。 – jordanm
ボトルはrequest.bodyとアップロードされたすべてのファイルを、一時ファイル(または、十分な大きさの場合はByteIOバッファ)に保存します。サーバーがすべての作業を行う前にアップロードサイズを制限する場合は、request.content_lengthを確認してください。すべてがメモリに収まるようにするには、アップロードされたファイルを答えにpyfuncが記述したように、小さなチャンクで読み書きします。 – defnull