【发布时间】: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