Как я могу загрузить пакетные изображения с именем на S3, используя Boto? - PullRequest
0 голосов
/ 23 мая 2018

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

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Я знаю, что ваш вопрос относится к 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
0 голосов
/ 25 мая 2018

Самое первое, фрагмент кода, который вы показываете в качестве ссылки, не для вашего случая использования, так как я написал этот фрагмент кода для пакетной загрузки из 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 .затем этот код будет перебирать каждый файл в поисках изображения, затем запрашивать ввод для произвольного имени и затем загружать ваш файл.

Кроме того, вы хотите показывать эти изображения на своем веб-сайте, поэтому public_read для изображений был включен с помощью ACL, поэтому вы можете напрямую использовать ссылки s3 для встраивания изображений в ваши веб-страницы, подобные этой.

https://s3.amazonaws.com/mausamrest/test/jkl.jpeg

Этот файл - тот, который я использовал для проверки этого фрагмента кода.ваши изображения будут доступны, как это.Убедитесь, что вы изменили название ковша.:)

0 голосов
/ 23 мая 2018

Использование метода Resource:

# 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]}
                      )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...