3

私は現在、特にcURLを使用してPUTメソッドでファイルをWebアプリケーションにアップロードするbashアプリケーションを持っています。クライアント (bash) 部分は GPL ですが、Web 部分は GPL ではないため、Web アプリケーションを複製しようとしています。また、クライアント アプリケーションは開発者の Web サイトから自動更新されるため、クライアント アプリケーションを変更することもできません。WSGI、CherryPy、Twisted を使用して HTTP POSTメソッドを処理する方法、および WWW で Python スクリプトを動作させるためのほぼすべての方法について、多数の情報を見つけました。ただし、 PUTメソッドについては何も見つかりません。WSGI を使用して PUT リクエストを処理する方法を知っている人はいますか? または、欠落している PUT 機能を備えた他のフレームワークがありますか?

4

1 に答える 1

4

私が理解しているように、リクエストはのコンテンツ全体をリクエストの本文として送信するenviron['wsgi.input']ため、ストリームを読みたいだけです。 PUTPUT

対処しなければならないエンコーディングの問題については認識していません (バイナリであるという事実を除いて)。

少し前に、LAN 上の別のサーバーから巨大なファイルを取得および提供するための単純な一連の PHP スクリプトを作成しました。POST から始めましたが、大きなファイルですぐにメモリ不足になりました。そこで、PHP スクリプトが一度にphp://input4096 バイト (または何でも) をループするのに十分な時間がかかる可能性がある PUT に切り替えました... うまく機能します。

PHPコードは次のとおりです。

$f1 = fopen('php://input', 'rb');
$f2 = fopen($FilePath, 'wb');

while($data = fread($f1, 4096))
{
    fwrite($f2, $data);
}

fclose($f1);
fclose($f2);

multipart/form-dataWSGI で を処理した経験から、入力ストリームを読み取るだけでPOSTa を処理できることに疑いの余地はありません。PUT

Python コードは次のようになります。

  output = open('/tmp/input', 'wb')
  while True:
    buf = environ['wsgi.input'].read(4096)
    if len(buf) == 0:
      break
    output.write(buf)
于 2011-01-10T00:06:22.147 に答える