Tornadoは、Webサーバーソフトウェアのオープンソースバージョンです。 Tornadoは、主流のWebサーバーフレームワーク(ほとんどのPythonフレームワークを含む)とは明らかに異なります。非ブロッキングサーバーであり、非常に高速です。
ノンブロッキング方式とepollの使用のおかげで、Tornadoは毎秒数千の接続を処理できるため、TornadoはリアルタイムWebサービスの理想的なフレームワークです。
Web開発プロセスでは、ファイルのアップロードは、添付ファイルのアップロード、写真のアップロードなど、頻繁に使用される機能です。簡単なファイルアップロード機能を実現するための tornado
の使い方を紹介しましょう。
通常のアップロード
# coding: utf-8import tornado.ioloop
import tornado.web
import shutil
import os
import json
classFileUploadHandler(tornado.web.RequestHandler):
def get(self):
self.write('''
< html
< head <title Upload File</title </head
< body
< form action='file' enctype="multipart/form-data" method='post'<input type='file' name='file'/ <br/<input type='submit' value='submit'/</form
< /body
< /html
''')
def post(self):
ret ={'result':'OK'}
upload_path = os.path.join(os.path.dirname(__file__),'files') #一時ファイルパス
file_metas = self.request.files.get('file', None) #'名前を抽出します''ファイルの場合'ファイルメタデータ
if not file_metas:
ret['result']='Invalid Args'return ret
for meta in file_metas:
filename = meta['filename']
file_path = os.path.join(upload_path, filename)withopen(file_path,'wb')as up:
up.write(meta['body'])
# OR do other thing
self.write(json.dumps(ret))
app = tornado.web.Application([(r'/file', FileUploadHandler),])if __name__ =='__main__':
app.listen(8080)
tornado.ioloop.IOLoop.instance().start()
ajaxを使用してアップロード
ajaxアップロードでは、フロントエンドがリクエストを送信する方法を変更する必要があります。次の方法を参照できます。
< html
< head <title Upload File</title
< script type="text/javascript" src="/www/static/jquery.min.js"</script
< /head
< body
< form id='upload' action='upload' enctype="multipart/form-data" method='post'<input type='file' name='file'/ <br/<input type='button' id='submit' value='submit'/</form
< /body
< script
$('#submit').click(function(){var form =$('form')[0];var formData =newFormData(form);
formData.append('image',$('input[type=file]')[0].files[0]);
$.ajax({
url:'/file/upload',
data: formData,
type:'POST',
contentType:false,
processData:false,
success:function(data){var obj = jQuery.parseJSON(data);alert(obj.result);// TODO},
error:function(data){var obj = jQuery.parseJSON(data);alert(data.result);}})});</script
< /html
注意
tornadoがファイルのアップロードを処理すると、ファイル全体がメモリに格納されます。
大きなファイルをアップロードする必要がある場合は、nginxのファイルアップロードモジュール(サードパーティモジュールをコンパイルする必要があります)が一般的に使用されます。
総括する
これまでに、Pythonトルネードアップロードファイルの機能に関するこの記事を紹介しました。関連するPythonトルネードアップロードファイルのコンテンツについては、ZaLou.Cnの以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後、ZaLou.Cnをサポートしていただければ幸いです。 !
Recommended Posts