【问题标题】:Serving a downloadable file (huge) from remote with django使用 django 从远程提供可下载的文件(巨大)
【发布时间】:2013-09-19 18:50:34
【问题描述】:

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

【问题讨论】:

  • 文件多久更改一次?可以缓存吗?
  • 这不仅仅是一个文件,还有很多。而且它们可以随时更新,其中大多数都像 500MB+ 每个...
  • 为什么要将响应时间加倍?当您下载时,您可以提供任何您得到的东西。它将与最慢的链接一样快。

标签: python django http


【解决方案1】:

您可以同时读取文件并进行流式传输。

查看Django 1.5 - using the new StreamingHttpResponse 中的代码 - 您需要做的就是将从其他服务器读取的代码放入生成器中。每次从套接字读取一些数据时,将其写入流输出。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 1970-01-01
      • 2017-10-09
      • 2013-03-25
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多