cherrypy.lib.static.py には次のメソッドがあります。
serve_file(path, content_type=None, disposition=None, name=None)
ここで、引数「パス」は実ファイル (絶対パス) でなければなりません。Pythonファイルオブジェクトを提供するのに似たものはありますか?
cherrypy.lib.static.py には次のメソッドがあります。
serve_file(path, content_type=None, disposition=None, name=None)
ここで、引数「パス」は実ファイル (絶対パス) でなければなりません。Pythonファイルオブジェクトを提供するのに似たものはありますか?
http://www.cherrypy.org/browser/trunk/cherrypy/lib/static.pyを勉強することから、私はノーと言わざるを得ません:serve_file
関数は「モノリシック」であり、独自のbodyfile = open(path, 'rb')
を行います。任意の代替方法。残念ながら、関数をリファクタリングして別のものを追加するのは簡単です。たとえばserve_open_file
、ケースをカバーするために、両方を内部関数に委任して、マルチパート/バイト範囲の提供などの「ハード」ロジックを処理します。しばらくの間、cherrypy.org で機能リクエスト (「拡張チケット」) を開く価値があるかもしれません -- キラー機能ではないかもしれませんが、私は使用例を見ることができます。サイトにアクセスし、ページの指示に従って「ログイン」してください)。
ファイルまたはファイルのようなオブジェクトが反復可能である限り、文字列ではなくハンドラー関数から返すだけです。
アップデート:
ダウンロードとして提供するには、Content-TypeヘッダーとContent-Dispositionヘッダーを次のように設定します。
cherrypy.response.headers["Content-Type"] = "application/x-download"
cd = 'attachment; filename="%s"' % name
cherrypy.response.headers["Content-Disposition"] = cd
または、serve_fileobj
最近のバージョンの関数を使用してください。これによりcherrypy/lib/static.py
、これが実行されます。
http://www.cherrypy.org/browser/trunk/cherrypy/lib/static.pyをもう一度見てみると、serve_fileobj
まさにあなたが望むことをしているように見えます。
編集:これを試してみましたが、ファイルのダウンロードを許可するのではなく、ファイルの内容を画面にレンダリングするだけです。