boto3 和 dropzone.js 的 S3 图片上传错误
S3 image upload error with boto3 and dropzone.js
使用这个 API 我可以使用 Postman 将文件上传到 S3。
我给出了文件“/home/user/Downloads/black-rose.png”的直接路径
header_logo = request.data['header_logo']
#local file path
data = open(header_logo, 'rb')
s3 = boto3.resource(
's3',
aws_access_key_id=ACCESS_KEY_ID,
aws_secret_access_key=ACCESS_SECRET_KEY,
config=Config(signature_version='s3v4')
)
#generatre a random url
header_logo = "header_logo/" + get_random_string(length=20) + ".png"
#AWS foler & file name with public access
s3.Bucket(BUCKET_NAME).put_object(Key=header_logo, ContentType = 'image/png', Body=data, ACL='public-read')
当我给出直接文件路径时,它的工作,但我的前端开发人员说他不能使用 javascript 给出直接文件路径,所以他使用插件 "dropzonejs" 来加密文件路径给出这样的文件
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAYAAAA5ZDbSAAAgAElEQVR4Xoy9B7hlZ3Xe/9u9nH5uL3OnabqkkTTqCFVAgA2SwQaX4GATHIc/DiFg
直接将此数据提供给 api 会引发错误
您只需要解码图像的base 64表示,然后上传解码结果,注意字符串的开头到第一个逗号实际上不是图像的一部分,您需要trim 前缀.
import base64
image_string = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAYAAAA5ZDbSAAAgAElEQVR4Xoy9B7hlZ3Xe/9u9nH5uL3OnabqkkTTqCFVAgA2SwQaX4GATHIc/DiFg"
image_encoded = image_string[image_string.index(',') + 1:]
image_data = base64.b64decode(image_encoded)
然后就可以把图片的数据上传到s3了
s3.Bucket(BUCKET_NAME).put_object(Key=header_logo, ContentType = 'image/png', Body=image_data, ACL='public-read')
使用这个 API 我可以使用 Postman 将文件上传到 S3。
我给出了文件“/home/user/Downloads/black-rose.png”的直接路径
header_logo = request.data['header_logo']
#local file path
data = open(header_logo, 'rb')
s3 = boto3.resource(
's3',
aws_access_key_id=ACCESS_KEY_ID,
aws_secret_access_key=ACCESS_SECRET_KEY,
config=Config(signature_version='s3v4')
)
#generatre a random url
header_logo = "header_logo/" + get_random_string(length=20) + ".png"
#AWS foler & file name with public access
s3.Bucket(BUCKET_NAME).put_object(Key=header_logo, ContentType = 'image/png', Body=data, ACL='public-read')
当我给出直接文件路径时,它的工作,但我的前端开发人员说他不能使用 javascript 给出直接文件路径,所以他使用插件 "dropzonejs" 来加密文件路径给出这样的文件
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAYAAAA5ZDbSAAAgAElEQVR4Xoy9B7hlZ3Xe/9u9nH5uL3OnabqkkTTqCFVAgA2SwQaX4GATHIc/DiFg
直接将此数据提供给 api 会引发错误
您只需要解码图像的base 64表示,然后上传解码结果,注意字符串的开头到第一个逗号实际上不是图像的一部分,您需要trim 前缀.
import base64
image_string = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAYAAAA5ZDbSAAAgAElEQVR4Xoy9B7hlZ3Xe/9u9nH5uL3OnabqkkTTqCFVAgA2SwQaX4GATHIc/DiFg"
image_encoded = image_string[image_string.index(',') + 1:]
image_data = base64.b64decode(image_encoded)
然后就可以把图片的数据上传到s3了
s3.Bucket(BUCKET_NAME).put_object(Key=header_logo, ContentType = 'image/png', Body=image_data, ACL='public-read')