我尝试使用PyMongo和我在Tornado中编写的API将大文件上传到GridFS。由于文件大小为4.1GB,Tornado会抛出Content-Length too long
。
此方案适用于NodeJS和this module,但我不确定PyMongo是否支持文件流。
答案 0 :(得分:1)
PyMongo支持将输入文件流式传输到GridFS,但Tornado不支持。见issue 231。尽管最初的问题报告已经过时,但有关Tornado邮件列表的传言表明,这将在接下来的几个小版本中得到修复。 (目前在Tornado 3.2。)当Tornado看到内容长度超过100MB时,它会引发您观察到的异常。
一个想法是使用Nginx为您的应用程序提供支持,并使用its file-upload module将用户的上传流式传输到临时文件中。 Nginx将在上传文件时告诉您的应用程序,然后您可以将临时文件流式传输到GridFS。在执行此操作时,请避免阻止Tornado进程,方法是生成子进程以使用PyMongo将文件复制到GridFS,或者使用Motor。