【问题标题】:What I am doing wrong by allowing user to download file from AWS with django boto3?允许用户使用 django boto3 从 AWS 下载文件,我做错了什么?
【发布时间】:2019-01-14 18:28:59
【问题描述】:

大家好!

我会尽量澄清我的问题。

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

"此后端不支持绝对路径。"

现在,经过一番研究,我正在使用 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):未找到

【问题讨论】:

  • 您在设置中有凭据吗?是进口的吗?
  • 是的,我有。我必须在boto3.client()boto3.resource() 中进行吗?
  • 请查看我在问题中的更新!谢谢你的建议
  • 文件好像不在你期望的路径上,你能检查一下s3中的路径吗?

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


【解决方案1】:

请尝试查看以下答案:

Boto3 Error: botocore.exceptions.NoCredentialsError: Unable to locate credentials

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

【讨论】:

    猜你喜欢
    • 2019-04-06
    • 2011-11-19
    • 1970-01-01
    • 2010-10-15
    • 2016-12-18
    • 2020-04-01
    • 2012-10-08
    • 2017-02-10
    • 1970-01-01
    相关资源
    最近更新 更多