python - 将图像上传到 S3 python
问题描述
我正在尝试通过 Python 将图像上传到 S3。我的代码如下所示:
import os
from PIL import Image
import boto
from boto.s3.key import Key
def upload_to_s3(aws_access_key_id, aws_secret_access_key, file, bucket, key, callback=None, md5=None, reduced_redundancy=False, content_type=None):
conn = boto.connect_s3(aws_access_key_id, aws_secret_access_key)
bucket = conn.get_bucket(bucket, validate=False)
k = Key(bucket)
k.key = key
k.set_contents_from_file(file)
AWS_ACCESS_KEY = "...."
AWS_ACCESS_SECRET_KEY = "....."
filename = "images/image_0.jpg"
file = Image.open(filename)
key = "image"
bucket = 'images'
upload_to_s3(AWS_ACCESS_KEY, AWS_ACCESS_SECRET_KEY, file, bucket, key)
我收到此错误消息:
S3ResponseError: S3ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>InvalidRequest</Code><Message> The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.</Message>
<RequestId>90593132BA5E6D6C</RequestId>
<HostId>...</HostId></Error>
此代码基于此网站的教程: http: //stackabuse.com/example-upload-a-file-to-aws-s3/
我已经尝试过 k.set_contents_from_file 和 k.set_contents_from_filename,但两者似乎都不适合我。
该错误说明了有关使用 AWS4-HMAC-SHA256 的信息,但我不知道该怎么做。除了使用 AWS4-HMAC-SHA256 之外,还有其他方法可以解决这个问题吗?如果有人可以帮助我,我将不胜感激。
谢谢!
解决方案
只需使用:
import boto3
client = boto3.client('s3', region_name='us-west-2')
client.upload_file('images/image_0.jpg', 'mybucket', 'image_0.jpg')
尽量避免将您的凭据放入代码中。反而:
- 如果您从 Amazon EC2 实例运行代码,只需将IAM 角色分配给具有适当权限的实例即可。将自动使用凭据。
- 如果您在自己的计算机上运行代码,请使用AWS 命令行界面 (CLI)
aws configure
命令将您的凭证存储在一个文件中,您的代码将自动使用该文件。
推荐阅读
- python - 熊猫同时添加多列
- git - 使用 git CLI 工具检查 git repo 头部的压力最小的方法
- git - How to 'Git Remove' files from a deleted folder?
- git - Gitkraken repo,未能签出分支,然后突然删除了几十个文件
- c++ - 在 Cocos2d-x 中一次使用多个精灵表
- javascript - 如何对一个充满对象的数组进行排序,每个对象都包含月年格式的日期属性?
- javascript - 抓取网站时控制台中没有显示任何内容
- php - 找不到 PHP Doctrine ORM 类
- python - Matplotlib图反转排序系列的Y轴?
- java - 如何使用 Jsoup 监听 WebView 中的元素变化?