【问题标题】:Django Storages [file upload to AWS S3]Django 存储 [文件上传到 AWS S3]
【发布时间】:2021-01-02 00:08:48
【问题描述】:

我正在使用 django storages 库将我的文件上传到 s3。我想了解这个文件上传是如何工作的,文件是直接上传到 s3 文件夹还是上传到我的服务器然后转到 s3?

文件上传如何在 django 存储中工作。

如果我上传多个文件,它们会使用我服务器的带宽吗?它们会直接上传到 s3 并且不会减慢我的服务器的速度。

谢谢

【问题讨论】:

  • 我找到了一个正在处理它的包。 github.com/dabapps/django-s3-file-upload-server
  • 我知道我不应该像这样离开 cmets 但是...... 很好的问题。我发现这个问题想知道 Django Storages 是否直接上传到 S3。

标签: django amazon-web-services boto3 python-django-storages


【解决方案1】:

Django-storage 使用boto3 进行上传,可以在其源代码here 中看到:

obj.upload_fileobj(content, ExtraArgs=params)

这是boto3中的upload_fileobj方法:

类文件对象上传到此存储桶。类文件对象必须是二进制模式。这是一个托管传输,如有必要,它将在多个线程中执行 multipart 上传。

查看Django-storage 中的save 方法,它未来会解释:

将新内容保存到名称指定的文件中。内容应该是适当的 File 对象或任何 Python 类文件对象,可以从头开始读取。

所以要回答您的问题,该文件必须首先通过您的服务器,以便您可以为其创建file-like object。它不一定要存储在硬盘上,但文件数据可以在内存中。另外我认为它也不必完全存储,应该可以在将其上传到您的应用程序时对其进行蒸汽处理,但我不确定这是否适用于 django。

总而言之,所有上传的文件都必须通过您的服务器,以获取处理能力和带宽。

【讨论】:

  • 我正在从手机上传文件,那么将文件上传到 s3 的最佳方法是什么?我应该使用预签名 URL 还是编写 lambda 函数来单独处理文件上传。提前谢谢你。
  • @AqeelRaza 取决于性质和您的用例。如果您只想按原样上传文件,预签名的 url 将允许您直接上传到 S3。如果您想在文件最终进入 S3 之前对文件进行一些预处理或验证,那么您可以使用 lambda 来执行此操作。
猜你喜欢
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 2021-02-07
  • 2021-02-02
  • 2017-09-17
  • 2015-12-15
  • 2017-10-17
  • 1970-01-01
相关资源
最近更新 更多