django - 允许用户使用 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):未找到
解决方案
推荐阅读
- mysql - SQL 将多个单元格中的数据重新排列为一个
- webrtc - UE4 Pixel Streaming 网页永远不会超过“开始连接服务器请稍候”,但仅在在家连接时
- python - 无法将“pickle”导入 pycharm 中的脚本
- c# - 对于 Azure Blob Storage .NET 客户端,“Microsoft.Azure.Storage.DataMovement”和“Azure.Storage.Blobs”有什么区别?
- oracle - 如何获取索引组织表 (IOT) 的 DDL
- javascript - 难以使用 Flask 加载 Javascript 包
- obiee - 如何引用查询结果的两列的内部元素以便在计算列中使用它们?
- x86 - 配置 QEMU 以测试多席位操作系统(多个控制台)
- javascript - 如何在 .NET 框架 4.52 中通过 SignalR 传递二进制数据而不进行 Base64 转换
- webdriver-io - 在浏览器关闭后幸存的全局变量 [wdio web driver io]