2

アップロードされたファイルをチャンクでメモリ、GZip、および署名し、長期保存のために別のサーバーに再アップロードする単純なアップロード ハンドラを Python で実装しています。Web サーバーでアップロードをチャンクで読み取る方法を既に考案しており、基本的には次のようなワークフローがあります。

class MyUploadHandler:

    def on_file_started(self, file_name):
        pass

    def on_file_chunk(self, chunk):
        pass

    def on_file_finished(self, file_size):
        pass

この部分はうまく機能します。

ここで、ファイルに変更を加えた後、ファイルをチャンク単位で最終的な宛先にアップロードする必要があります。次のようなワークフローを探しています。

import requests

class MyUploadHandler:

    def on_file_started(self, file_name):
        self.request = requests.put("http://secondaryuploadlocation.com/upload/%s" %
                (file_name,), streaming_upload = True)

    def on_file_chunk(self, chunk):
        self.request.write_body(transform_chunk(chunk))

    def on_file_finished(self, file_size):
        self.request.finish()

Python requests ライブラリを使用してこれを行う方法はありますか? 読み取り可能なファイルのようなアップロード オブジェクトを許可しているようですが、それが何を意味し、私の状況に適用する方法が正確にはわかりません。このようなストリーミング アップロード リクエストを提供するにはどうすればよいですか?

4

2 に答える 2

0

Python の multiprocessing モジュールを使用することをお勧めします。そのモジュールで apply_async ルーチンを使用して、他のアップロードに影響を与えることなく、完了した各チャンクをアップロードできます。その後、それらを一時フォルダーに配置し、アップロード イベントの完了後にそれらを縫い合わせることができます。

于 2016-01-06T18:15:35.287 に答える
-1

同様の質問に対する次の回答で問題が解決するはずです。

Q: 「POST データを Python リクエストにストリーミングする方法は?」

A:とセンチネルを使用queueしたコード例threadingiter()

https://stackoverflow.com/a/40018547/19163

于 2016-10-14T06:49:34.030 に答える