如何在Django中从S3存储桶下载媒体文件

时间:2019-10-28 17:42:11

标签: amazon-web-services amazon-s3 django-storage

我正在尝试从S3的媒体目录下载文件。我有以下下载代码:

StackView 1

在设置中,我将MEDIA_ROOT设置如下:

def download_document(request, pk):
    service = Service.objects.get(pk=pk)
    file_path = os.path.join(settings.MEDIA_ROOT, service.pdf_file.name)
    print(file_path)
    file_mimetype = mimetypes.guess_type(file_path)
    if os.path.exists(file_path):
        with open(file_path, 'rb') as fh:
            response = HttpResponse(fh.read(), content_type=file_mimetype)
            response['Content-Disposition'] = 'inline; filename=' + os.path.basename(file_path)
            return response

    raise Http404

因此,当我在本地运行时,我将媒体存储在本地,但是当我在AWS上运行时,我将存储在S3存储桶中。它可以按照我在本地的预期工作,但是当我尝试应用s3存储桶时,我得到的文件不存在

1 个答案:

答案 0 :(得分:1)

我要检查的第一件事是您是否实际上可以从S3匿名检索媒体文件以丢弃任何与权限相关的问题。使用curl或wget。

如果不能,那么您有两个选择:

  • 将存储桶策略和ACL更改为公开。
  • 设置AWS凭证并使用boto3从S3检索内容。