我正在为Django应用程序创建API,其中一个PUT请求允许(非常)大文件上传。我试图在Heroku上托管应用程序,但我遇到了文件上传和30秒限制和短暂文件系统的一些问题。我现在正试图将文件传递到s3存储桶(通过boto并滥用multipart_upload
功能),但是在上传完成之前,该过程正在消失。我很早就找到了this extremely helpful answer,这对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并对此感到满意。提前谢谢。