Python 如何使用挂架为大型文件提供服务?

Python 如何使用挂架为大型文件提供服务?,python,web-services,download,pylons,Python,Web Services,Download,Pylons,我正在编写一个基于挂架的下载网关。网关的客户端将按ID地址文件: /file_gw/download/1 在内部,通过HTTP从内部文件服务器访问文件本身: http://internal-srv/path/to/file_1.content 文件可能相当大,所以我想流式传输内容。我将有关文件的元数据存储在StoredFile模型对象中: class StoredFile(Base): id = Column(Integer, primary_key=True) name =

我正在编写一个基于挂架的下载网关。网关的客户端将按ID地址文件:

/file_gw/download/1
在内部,通过HTTP从内部文件服务器访问文件本身:

http://internal-srv/path/to/file_1.content
文件可能相当大,所以我想流式传输内容。我将有关文件的元数据存储在StoredFile模型对象中:

class StoredFile(Base):
    id = Column(Integer, primary_key=True)
    name = Column(String)
    size = Column(Integer)
    content_type = Column(String)
    url = Column(String)

考虑到这一点,什么是最好的(即:在架构上声音、性能等方面最好)编写FieleGW控制器的方法?

< P>我会考虑使用NGNIX或等价物。

< P>最有架构的方法是让控制器重定向到Amazon S3下载文件并在Amazon S3上存储文件。

< P>你想避免的一件事是在返回之前将整个文件加载到内存中。客户端的第一个字节。在wsgi中,可以为响应体返回迭代器。webob文档对此有一个简单的描述,您应该能够在控制器中工作。毕竟,挂架使用webob

这样做的总体效果是,无论返回第一个块需要多长时间,客户端都会立即收到文件正在下载的反馈

您可能还想看看MongoDB的实现,这是一种非常好的方法,可以让分布式文件系统运行起来,它针对一次写入多类型文件操作进行了优化


如果您必须自己动手,这两件事的结合将是一个良好的开端。

为了论证起见,我们假设有一个商业案例要求内容存储在本地。S3出局了。