1

cherrypy.lib.static.py には次のメソッドがあります。

  serve_file(path, content_type=None, disposition=None, name=None)

ここで、引数「パス」は実ファイル (絶対パス) でなければなりません。Pythonファイルオブジェクトを提供するのに似たものはありますか?

4

3 に答える 3

3

http://www.cherrypy.org/browser/trunk/cherrypy/lib/static.pyを勉強することから、私はノーと言わざるを得ません:serve_file関数は「モノリシック」であり、独自のbodyfile = open(path, 'rb')を行います。任意の代替方法。残念ながら、関数をリファクタリングして別のものを追加するのは簡単です。たとえばserve_open_file、ケースをカバーするために、両方を内部関数に委任して、マルチパート/バイト範囲の提供などの「ハード」ロジックを処理します。しばらくの間、cherrypy.org で機能リクエスト (「拡張チケット」) を開く価値があるかもしれません -- キラー機能ではないかもしれませんが、私は使用例を見ることができます。サイトにアクセスし、ページの指示に従って「ログイン」してください)。

于 2009-05-31T21:41:22.147 に答える
2

ファイルまたはファイルのようなオブジェクトが反復可能である限り、文字列ではなくハンドラー関数から返すだけです。

アップデート:

ダウンロードとして提供するには、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、これが実行されます。

于 2011-09-12T17:05:18.193 に答える
0

http://www.cherrypy.org/browser/trunk/cherrypy/lib/static.pyをもう一度見てみると、serve_fileobjまさにあなたが望むことをしているように見えます。

編集:これを試してみましたが、ファイルのダウンロードを許可するのではなく、ファイルの内容を画面にレンダリングするだけです。

于 2011-09-08T19:58:28.440 に答える