2

我正在为 Django 应用程序创建一个 API,其中一个 PUT 请求允许上传(非常)大文件。我正在尝试在 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