【问题标题】:How to have Client uploads go directly to S3 rather than proxying through Django如何让客户端上传直接到 S3 而不是通过 Django 代理
【发布时间】:2015-11-10 12:56:33
【问题描述】:

我使用 Django 和 boto3 sdk

这是目前的治疗方法。

1.客户端将文件发送到 Django(EC2)
2. 将文件保存到 Django(EC2)
3. 将存储在 Django(EC2) 上的文件发送到 S3。

但是,这是低效的。所以,我想这样做

1.客户端将文件发送到 Django(EC2)
2.接收文件S3中的实时传输

我不想存储 EC2.... 但是,要将文件传输到 S3,我需要检查以前的 EC2 中的文件信息。我不想将文件从客户端传输到 S3。

是动态转移到EC2中的S3。

我该怎么做?

【问题讨论】:

    标签: python django amazon-web-services amazon-s3 amazon-ec2


    【解决方案1】:

    这看起来很有希望——https://github.com/Cadasta/django-buckets

    django-buckets 提供了一个 Django 存储系统(S3Storage)来存储 Amazon S3 上的文件。除了存储本身,图书馆还附带 一个自定义模型字段(S3FileField)来引用 Django 中的文件和一个 处理使用预签名 URL 将文件上传到 S3 的表单小部件。

    这里已经很晚了,如果有人留下评论提醒我,我会尝试使用它,我会跟进分享我的经验

    【讨论】:

    • 我非常感谢您对此的跟进 :)
    【解决方案2】:

    您可以使用 aws-sdk 直接将文件 POST 到 S3。

    1. POST 文件类型和文件大小到 Django。
    2. 使用 aws-sdk 为 s3-url 签名。 (允许客户端将文件 POST 到 S3 上的特定路径)
    3. 将文件直接从客户端发布到 S3。

    见下面的例子(但它在 js 中) https://github.com/bookingbricks/file-upload-example

    【讨论】:

    • 不错,但是这个例子需要一个节点服务器——他在问 django
    【解决方案3】:

    有几种方法可以让用户直接从他们的客户端浏览器上传到 S3:

    下面描述了这背后的过程:

    Amazon S3 支持 POST,它允许您的用户将内容直接上传到 Amazon S3。 POST 旨在简化上传、减少上传延迟并在用户上传数据以存储在 Amazon S3 中的应用程序上为您节省资金。 http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html

    您可以使用/适应的一些可行选项:

    1. Direct to S3 File Uploads in Python
    2. How to generate a temporary url to upload file to Amazon S3 with boto library?
    3. How to upload directly to S3 using AWS Javascript SDK

    【讨论】:

      【解决方案4】:

      您可以使用django-storages 将文件发送到 s3,这里是关于 S3 部分 http://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html 的文档。这里还有一个视频https://godjango.com/47-django-storages-and-amazons3/

      【讨论】:

      • django-storages 需要通过您的服务器进行路由,这忽略了这个问题的前提......
      猜你喜欢
      • 1970-01-01
      • 2012-03-10
      • 2020-11-14
      • 1970-01-01
      • 2018-07-15
      • 2020-07-22
      • 2012-03-14
      • 1970-01-01
      • 2018-04-23
      相关资源
      最近更新 更多