我正在将图片上传到当地的文件夹。喜欢在网站/上传。 在搜索之后我得到了将图像上传到s3我必须这样做
import boto3
s3 = boto3.resource('s3')
# Get list of objects for indexing
images=[('image01.jpeg','Albert Einstein'),
('image02.jpeg','Candy'),
('image03.jpeg','Armstrong'),
('image04.jpeg','Ram'),
('image05.jpeg','Peter'),
('image06.jpeg','Shashank')
]
# Iterate through list to upload objects to S3
for image in images:
file = open(image[0],'rb')
object = s3.Object('rekognition-pictures','index/'+ image[0])
ret = object.put(Body=file,
Metadata={'FullName':image[1]}
)
澄清
我的代码是将图像和名称发送给S3。但我不知道如何在这行代码images=[('image01.jpeg','Albert Einstein'),
中获取图像,如何在/upload/image01.jpeg中从此代码中获取此图像。以及如何从s3获取图像并在我的网站图像页面中显示?
答案 0 :(得分:1)
使用资源方法:
# Iterate through list to upload objects to S3
bucket = s3.Bucket('rekognition-pictures')
for image in images:
bucket.upload_file(Filename='/upload/' + image[0],
Key='index/' + image[0],
ExtraArgs={'FullName': image[1]}
)
使用客户端方法:
import boto3
client = boto3.client('s3')
...
# Iterate through list to upload objects to S3
for image in images:
client.upload_file(Filename='/upload/' + image[0],
Bucket='rekognition-pictures',
Key='index/' + image[0],
ExtraArgs={'FullName': image[1]}
)
答案 1 :(得分:1)
我知道你的问题是boto3特有的,所以你可能不喜欢我的答案,但它会达到你想要达到的效果,而aws-cli也会使用boto3。
见这里:http://bigdatums.net/2016/09/17/copy-local-files-to-s3-aws-cli/
此示例来自网站,可以轻松地在脚本中使用:
#!/bin/bash
#copy all files in my-data-dir into the "data" directory located in my-s3-bucket
aws s3 cp my-data-dir/ s3://my-s3-bucket/data/ --recursive
答案 2 :(得分:1)
首先,您作为参考显示的代码片段不适用于您的用例,因为我已经编写了从boto3批量上传的代码段,您必须在脚本中提供图像路径以及图像的元数据,所以你的代码片段中的名称是元数据。所以我从你的问题中了解到,你想要上传本地文件夹中的文件,并希望在上传之前提供自定义名称,所以这就是你要做的。
import os
import boto3
s3 = boto3.resource('s3')
directory_in_str="E:\\streethack\\hold"
directory = os.fsencode(directory_in_str)
for file in os.listdir(directory):
filename = os.fsdecode(file)
if filename.endswith(".jpeg") or filename.endswith(".jpg") or filename.endswith(".png"):
strg=directory_in_str+'\\'+filename
print(strg)
print("Enter name for your image : ")
inp_val = input()
strg2=inp_val+'.jpeg'
file = open(strg,'rb')
object = s3.Object('mausamrest','test/'+ strg2) #mausamrest is bucket
object.put(Body=file,ContentType='image/jpeg',ACL='public-read')
else:
continue
以编程方式,您必须在 directory_in_str 变量中提供此示例中硬编码的文件夹路径。然后,此代码将迭代搜索图像的每个文件,然后它将要求输入自定义名称,然后它将上传您的文件。
此外,您希望在您的网站上显示这些图像,因此使用ACL打开了图像的public_read,因此您可以直接使用s3链接在您的网页中嵌入图像。
https://s3.amazonaws.com/mausamrest/test/jkl.jpeg
以上文件是我用来测试此代码段的文件。你的图像将是这样的availbale。确保更改存储桶名称。 :)