我想使用CLI将100张图像上传到s3存储桶。除了一张一张地上传图片之外,还有其他方法可以将100张图片一起上传吗? 我的代码是这样的
import boto3
import sys
#s3-rish = argv[0]
filen = sys.argv[1]
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
print(bucket.name)
#filen='messi.jpeg'
data = open(filen, 'rb')
x=s3.Bucket('bucket-rishabh').put_object(Key=""+filen, Body=data,Metadata= {'FullName': sys.argv[2]})
x.Acl().put(ACL='public-read')
print x
# Works Properly enter code here
# Takes in image input as command line arguments first image path than image name'
可以对输入100张图像的这些代码行进行哪些修改?
答案 0 :(得分:1)
您的代码使用的是适用于Python的AWS开发工具包(“ boto3”),而不是AWS Command-Line Interface (CLI)。 AWS CLI也用Python编写,并使用boto调用AWS。
没有Amazon S3 API调用可上传多个文件。您将需要分别上传每个文件。通过一些巧妙的编程,您可以使用多个线程同时上传多个文件,但是每个API调用只会上传单个文件。
AWS CLI表示包括了聪明的编程,因此您可以使用aws s3 cp
或aws s3 sync
指定多个文件,它将执行并行上传。
答案 1 :(得分:0)
您可以将所有图像存储在一个特定的文件夹中,然后使用这种python脚本上传在文件夹中找到的所有图像:
import os
import boto3
s3 = boto3.resource('s3')
directory_in_str="E:\\streethack\\hold" # change directory path to your images folder
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)
file = open(strg,'rb')
object = s3.Object('bucketname',filename)
object.put(Body=file,ContentType='image/jpeg')
else:
continue
基本上,此脚本将循环访问文件夹中的每个文件,如果它是图像,则会将该图像上载到存储桶中。
如果您希望在上传之前为图片指定自定义名称,则可以进行一些修改:
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('bucketname',strg2)
object.put(Body=file,ContentType='image/jpeg',ACL='public-read')
else:
continue