使用 django 从远程提供可下载的文件(巨大)



我正在尝试让我的服务器从另一台服务器提供一个巨大的文件。但是,为了保护我的凭据免受该远程服务器的侵害,我不能简单地将请求者重定向到文件 URL;另一方面,虽然使用 StreamingHttpResponse 不会将内容添加到内存或 hardrive,但它确实需要更多时间 - 服务器仍然需要从遥控器下载文件然后提供它,这会使响应时间加倍。有什么方法可以"重定向"远程文件的内容,而无需实际下载它?谢谢。

您可以

同时读取文件并流式传输它。

看看 Django 1.5 中的代码 - 使用新的 StreamingHttpResponse - 你需要做的就是将从其他服务器读取的代码放入生成器中。 每次从套接字读取一些数据时,请将其写入流式处理输出。

如果您使用的是 Amazon CloudFront,他们会通过称为"签名 URL"的概念来解决此问题。基本上,您使用公钥加密来生成一次性 URL;您可以指定 URL 仅可用于的时间范围,并且只有特定 IP 地址可以下载内容。其他云提供商也可能具有类似的功能。

如果您未使用 CloudFront 但可以控制下载服务器,则可以构建类似的基础设施。基本上,您使用私钥签署一条消息,其中包含时间戳、要下载的文件的名称和下载策略(例如到期日期和 IP 范围),远程服务器使用您的公钥来验证消息是否确实来自您的服务器,然后强制执行该策略。

这是从远程服务器安全地提供大文件的最有效方法,因为您的服务器不需要先将文件下载到您的服务器。

最新更新