Загрузка нескольких изображений в Amazon AWS с помощью CLI - PullRequest
0 голосов
/ 02 июля 2018

Я хочу загрузить 100 изображений в корзину s3 с помощью CLI. Вместо загрузки изображения по одному, есть ли другой способ загрузить 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 изображений?

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Вы можете хранить все ваши изображения в одной конкретной папке, а затем использовать этот вид сценария 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
0 голосов
/ 02 июля 2018

Ваш код использует AWS SDK для Python («boto3»), а не Интерфейс командной строки AWS (CLI) . CLI AWS также написан на Python и использует boto для вызова AWS.

Нет вызова API Amazon S3 для загрузки нескольких файлов. Вам нужно будет загрузить каждый файл в отдельности. При некотором умном программировании вы можете использовать несколько потоков для одновременной загрузки нескольких файлов, но каждый вызов API будет загружать только один файл.

В интерфейс командной строки AWS включено умное программирование, поэтому вы можете использовать aws s3 cp или aws s3 sync для указания нескольких файлов, и он будет выполнять параллельную загрузку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...