python-3.x - 如何使用 django rest framework api 将文件上传到 s3 存储桶
问题描述
我正在尝试将文件上传到 Django 项目中的 AWS 存储桶
@api_view(['POST'])
def upload_image(request):
image = request.FILES['image']
file_name = request.POST.get('file_name')
access_key = settings.AWS_ACCESS_KEY_ID
access_secret_key = settings.AWS_SECRET_ACCESS_KEY
bucket_name = settings.AWS_STORAGE_BUCKET_NAME
# bucket_name value is "https://s3.region.amazonaws.com/bucket_name/sub_bucket_name/"
# I am not sure if it is correct way to give bucket name where I want my file to be uploaded
client_s3 = boto3.client(
's3',
aws_access_key_id = access_key,
aws_secret_access_key= access_secret_key
)
client_s3.upload_file(
file_name,
bucket_name,
image
)
url = f'{end_point}{bucket_name}/{file_name}'
return Response({'success': True,
'message': "File has been uploaded",
'url': url
},
status=status.HTTP_200_OK)
这就是我通过邮递员将文件和文件名传递给api的方式。
我得到的错误是 - "FileNotFoundError: [Errno 2] No such file or directory: "name of file""
我已阅读教程,使用 boto3 将文件上传到 s3 存储桶看起来相当简单。但是,有些我无法上传文件。
解决方案
如果这是您的存储桶网址:
https://s3.region.amazonaws.com/bucket_name/sub_bucket_name/
然后
file_name = 'yourlocalfile.jpg'
bucket = 'bucket_name'
key = 'sub_bucket_name/myfile.jpg'
client_s3.upload_file(file_name, key, ExtraArgs={'ContentType': 'image/jpeg'})
推荐阅读
- ssl - TLS 警报是否有优先级?
- javascript - 当我使用 Chrome Lite 模式切换暗模式时,我的背景图像不显示
- html - 有没有办法从烧瓶中的多个表单中获取表单数据?
- android - 颤振尝试在空对象引用上调用虚拟方法'void io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onPostResume()'
- docker - 如何删除containerd中的所有容器和镜像?
- java - 如何使用 pdfbox 启用长期验证 (LTV)
- node.js - 在订单表格中通过电子邮件创建 PayPal 付款到帐户
- c++ - 为什么在 int 之后使用星号 (*)?ptr = (int*) malloc (100 * sizeof(int));
- c# - 如何修复错误的格式时间?
- html - 如何在保持相同视觉外观的同时减少 CSS 文件中的行数(CSS 代码优化)