【问题标题】:Allow download of entire contents of Amazon S3 folder in Django允许在 Django 中下载 Amazon S3 文件夹的全部内容
【发布时间】:2020-09-01 00:46:59
【问题描述】:

我正在使用 Django,并且我有一个 S3 帐户,其中包含一个名为 media 的文件夹中的文件。我希望允许用户将整个文件列表下载为存档的 zip 文件夹,以节省他们必须单击每个单独的链接来获取文件的时间。

我正在使用 Django、Amazon S3 和 Boto3。链接就像,

https://mydomain.s3.amazonaws.com/media/filename1.txt
https://mydomain.s3.amazonaws.com/media/filename2.txt
https://mydomain.s3.amazonaws.com/media/filename3.txt
https://mydomain.s3.amazonaws.com/media/filename4.txt
https://mydomain.s3.amazonaws.com/media/filename5.txt

非常重要,我想将所有文件捆绑在另一个链接中,该链接是所有文件的下载链接。

关于如何使用 Django 执行此操作的任何建议?

【问题讨论】:

  • 要访问每个文件,您可以使用 S3 预签名 URL。要下载为存档,您需要编写 python 代码来下载多个文件并将其存档

标签: python-3.x django amazon-web-services amazon-s3 boto3


【解决方案1】:

为了允许访问存储在 s3 中的文件,您可以生成一个 s3 预签名 URL,该 URL 将提供对该文件的特定访问(读取或写入)。生成的每个 Url 都可以访问一个文件。仅授予特定时间(最多 7 天)的访问权限。这是最推荐的方法。如果您不希望 Url 过期,则需要创建一个 django 路由来为用户下载文件。

为了将文件下载为存档,您需要创建一个 django 路由,例如/downloadAll?user=1。当用户访问该 url 时,您需要使用 s3 从 s3 下载文件并创建存档。

【讨论】:

  • 我决定将每个文件的内容写入一个大文件,并允许在用户端下载和存档。实现归档的主要问题是从 Amazon 的 S3 端打开文件并将该文件的内容写入 zip 文件,该文件将作为响应中类型为“application/zip”的 HttpResponse 返回。跨度>
【解决方案2】:

我在django中写了一个管理任务来避免页面上的长时间等待,这样一旦创建了这些文件就可以运行管理任务了。

python manage.py archive_files

from django.core.management.base import BaseCommand, CommandError

class Command(BaseCommand):
    help = ''
    def handle(self, *args, **options):
        self.stdout.write("doing")
        write_archive_file()
        self.stdout.write("done")

创建存档文件后,我就可以下载该文件了。

【讨论】:

    猜你喜欢
    • 2021-01-21
    • 2012-10-10
    • 2013-05-08
    • 2023-03-15
    • 2013-07-29
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多