首页 > 解决方案 > 允许用户使用 django boto3 从 AWS 下载文件,我做错了什么?

问题描述

你好真棒人!

我会尽量澄清我的问题。

我所有的媒体文件都上传到AWS,我创建了一个视图,允许每个用户下载图像。之前,我在没有总结的博托的情况下做到了

“这个后端不支持绝对路径。”

现在,经过一番研究,我正在使用 s3 boto3 连接。

模型

class Photo(models.Model):
     file = models.ImageField(upload_to="uploaded_documents/")
     total_download = models.PositiveIntegerField()

看法

def download_file(request,id):  
     photo = get_object_or_404(Photo,id=id)
     photo.total_download += 1
     photo.save()

     path = os.path.basename(photo.file.name)
     # path = '/media/public/uploaded_documents/museum.jpg'

     client = boto3.client('s3',aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
                 aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY)


     resource = boto3.resource('s3')
     bucket = resource.Bucket(settings.AWS_STORAGE_BUCKET_NAME)

     bucket.download_file(path, 'my_local_image.jpg')

在这里我不知道该怎么做才能触发它。当我运行它时,我收到以下错误:

/api/download-file/75处的
NoCredentialsError 异常类型:NoCredentialsError
异常值:无法找到凭据

更新

我在资源中使用凭据而不是客户端

client = boto3.client('s3')
resource = boto3.resource('s3',aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
                 aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY)

它似乎已经过身份验证。但现在我得到了错误:

异常类型:ClientError
异常值:调用 HeadObject 操作时发生错误(404):未找到

标签: djangoamazon-web-servicesamazon-s3boto3

解决方案


请尝试查看以下答案:

Boto3 错误:botocore.exceptions.NoCredentialsError:无法找到凭据

还要检查 S3 中的文件路径是否正确


推荐阅读