1

Tornado Web フレームワークは初めてです。tornado フレームワークを使用して Web ブラウザからファイルをダウンロードする方法を教えてください。

4

1 に答える 1

15

Tornado には、同期および非同期の両方の HTTP クライアントが付属しています。ドキュメントはこちらにあります

上記のリンク先のページから取得した同期の例を次に示します。

from tornado import httpclient
http_client = httpclient.HTTPClient()
try:
    response = http_client.fetch(url)
    print(response.body)
except httpclient.HTTPError as e:
    print("Error:", e)
http_client.close()

結果の出力をディスクに保存する場合は、データを印刷する代わりに、ファイルに書き出します。Python 3 でも、Tornado はレスポンス ボディを文字列として返すことに注意してください。

with open(output_file_name) as f:
    f.write(response.body)

もちろん、応答データが非常に大きい場合は、ファイルを分割してダウンロードし、オンザフライでディスクに書き込む必要があります (こちらを参照)。

最後に、何らかの理由で Tornado に制約されていない場合は、requestsライブラリ (またはgrequests非同期呼び出し用) を強くお勧めします。

編集: 静的ファイルをダウンロードとして提供するには、ハンドラーで次のようにしますget

def get(self):
    file_name = 'file.ext'
    buf_size = 4096
    self.set_header('Content-Type', 'application/octet-stream')
    self.set_header('Content-Disposition', 'attachment; filename=' + file_name)
    with open(file_name, 'r') as f:
        while True:
            data = f.read(buf_size)
            if not data:
                break
            self.write(data)
    self.finish()

Python 3 では、バイト/文字列の問題がある場合とない場合があります。

于 2013-08-20T08:18:21.423 に答える