Как мы можем загрузить несколько изображений, используя URL-адрес presigned_post в s3

Я пытаюсь загрузить несколько изображений в s3 из реагирующего приложения, используя шлюз aws api. Я пробовал следующий подход:

  1. Настройте API-шлюз, предназначенный для лямбда-функции.
  2. lambda function code:
    
  3. import json
    import boto3
    
    
    def lambda_handler(event, context):
        print(event)
        s3 = boto3.client('s3', region_name='us-east-1')
        bucket_name = 'testimagesbucketupload'
    
        URL = s3.generate_presigned_post(
                Bucket= bucket_name, 
                Key = "${filename}", 
    
                # Conditions=[
                #     ["starts-with", "$success_action_redirect", ""],
                #     ["eq", "$userid", "test"],
                #     ], 
                ExpiresIn=3600)
        data = {"url": URL['url'], "fields": URL['fields']}
        print(type(data))
        # print(data)
        return data
    
    

Используя приведенный выше код, я могу загрузить одно изображение из Интернета и почтальона, но теперь я хочу загрузить несколько изображений, используя этот URL-адрес, а также хочу получить изображение для предварительного просмотра.

Если кто-то работал, пожалуйста, помогите мне

Заранее спасибо..

Я пробовал presigned_post и presigned-url для достижения этого, но все же я не могу этого добиться

где изображения, которые вы пытаетесь загрузить?

Pedro Rocha 13.02.2023 15:46

мы работаем над одним приложением, в котором у нас есть функции для захвата и прикрепления изображений после захвата, нам нужно отправить все изображения в s3, но в целях безопасности мы используем предварительно подписанный URL-адрес

Shubham Kaushik 13.02.2023 19:11
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно будет создать один URL-адрес для изображения, но вы можете использовать цикл, чтобы создать их все. Я думаю, что-то вроде этого может сработать для вас

import boto3

def lambda_handler(event, context):

    s3 = boto3.client('s3', region_name='us-east-1')
    bucket_name = 'testimagesbucketupload'
    
    image_list = event['image_list'] 

    data = []
    for image in image_list:
        URL = s3.generate_presigned_post(
                Bucket= bucket_name, 
                Key=image, 
                ExpiresIn=3600)
        data.append({"url": URL['url'], "fields": URL['fields']})

    return data

Обратите внимание, что вам нужно передать список изображений в событии

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

from botocore.client import Config
import boto3

s3 = boto3.client('s3', config=Config(signature_version='s3v4'), region_name = "your_region")

presigned_url = s3.generate_presigned_url('get_object',
                                Params = {'Bucket': "your_bucket",
                                        'Key': "your_file_key"},
                                ExpiresIn=3600)
presigned_url

Для нескольких изображений: теперь мой поток выглядит следующим образом: 1. когда я нажму на свой первый пост API, я получу URL-адрес в ответ с файлами 2. На втором этапе я отправил изображение с URL-адресом сообщения, который я получил с 1-го шага, поэтому отправка список изображений на первом шаге - правильный подход? потому что то же самое мы также достигаем с помощью предварительно подписанного URL-адреса для создания разных URL-адресов для каждого изображения любым другим способом, которым мы загружаем несколько/массовых изображений

Shubham Kaushik 13.02.2023 20:24

Вы можете изменить свой код для работы со списком изображений/URL-адресов, чтобы вам нужно было делать меньше запросов к вашему API. Вы получите те же результаты, но более эффективным способом.

Pedro Rocha 13.02.2023 22:48

если у вас есть пример, вы можете добавить его сюда

Shubham Kaushik 14.02.2023 03:20

Другие вопросы по теме