2

Djangoアプリケーション用のAPIを作成していますが、PUTリクエストの1つで(非常に)大きなファイルのアップロードが可能になります。Herokuでアプリケーションをホストしようとしていますが、ファイルのアップロードと30秒の制限および一時的なファイルシステムでいくつかの問題が発生しています。現在、ファイルをs3バケットに渡そうとしています(botoを介して、multipart_upload関数を悪用しています)が、アップロードが完了する前にプロセスが終了しています。この非常に役立つ回答を早い段階で見つけました。これは、API全般にとって優れたアドバイスでしたが、Herokuの問題を解決するものではありません。

私からしてみれば

for i, handler in enumerate(upload_handlers):
    chunk = request.read(handler.chunk_size)
        while chunk:
            handler.write_multipart_upload(chunk, counters[i], filename=file_name)
            counters[i] += len(chunk)
            chunk = request.read(handler.chunk_size)

for i, handler in enumerate(upload_handlers):
    file_obj = handler.file_complete(counters[i])

私のハンドラーで

def write_multipart_upload(self, raw_data, start, filename=None):
    if not self.mp:
        self._validate_file(filename=filename)
        self.mp = self.bucket.initiate_multipart_upload('feeds/' + self.file_name)

    self.buffer.write(raw_data)

    if self.buffer.len:
        self.buffer.seek(0)
        self.mp.upload_part_from_file(self.buffer, self.total_chunks)
        self.buffer.close()
        self.buffer = StringIO()

def file_complete(self, file_size):
    self.mp.complete_upload()
    self.file

多分これはあまりにも複雑になっています。この時点で、私はシンプルで保守しやすいものを探しています。大きなファイルをアップロードするためのPUTベースのAPIの確かに機能する例を誰かが持っているなら、私はHerokuを廃棄して、それに満足します。前もって感謝します。

4

0 に答える 0