Django 作为 S3 代理

标签 django django-admin amazon-s3 amazon-web-services boto

我使用自定义字段“下载文件”扩展了 ModelAdmin,它是我的 Django 项目中 URL 的链接,例如:

http://www.myproject.com/downloads/1

在那里,我想提供一个存储在 S3 存储桶中的文件。存储桶中的文件不是公开可读的,用户可能无法直接访问它。现在我想
  • 避免必须将文件加载到服务器内存中(这些是多 GB 文件)
  • 避免在服务器上放置临时文件

  • 理想的解决方案是让 django 充当代理,将 S3 块直接传输给用户。我使用 boto,但没有找到流式传输块的可能性。
    有任何想法吗?

    谢谢。

    最佳答案

    而不是代理,为什么不简单地重定向?

    使用 www.myproject.com/downloads/1 上的 django View 提供到 S3 存储 URL 的 HTTP 重定向 - 可以生成有时间限制的经过身份验证的 URL,例如看这里 https://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html

    然后客户端直接从 S3 下载文件,但内容仍然是安全的,访问必须通过您的 Django 应用程序

    关于Django 作为 S3 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2636783/

    相关文章:

    Django 用户保存钩子(Hook)

    amazon-s3 - 尝试使用 Pyspark 访问 AWS S3 时出错

    java - 如何在不下载的情况下获取S3上csv文件的行数?

    python - IntegrityError :NOT NULL constraint failed: chatapp_chat. 消息

    HttpResponseRedirect后未显示Django消息

    python - 有没有使用 django 的 i18n 帮助模块?

    python - 如何在django admin中显示与某个用户相关的记录

    Django Includes - 它们是邪恶的吗?

    Django 管理列表过滤器

    ruby-on-rails - Rails - 通过 API 将文件直接上传到 S3