Я пытаюсь загрузить несколько изображений в s3 из реагирующего приложения, используя шлюз aws api. Я пробовал следующий подход:
lambda function code:
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 для достижения этого, но все же я не могу этого добиться
мы работаем над одним приложением, в котором у нас есть функции для захвата и прикрепления изображений после захвата, нам нужно отправить все изображения в s3, но в целях безопасности мы используем предварительно подписанный URL-адрес
Вам нужно будет создать один 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-адресов для каждого изображения любым другим способом, которым мы загружаем несколько/массовых изображений
Вы можете изменить свой код для работы со списком изображений/URL-адресов, чтобы вам нужно было делать меньше запросов к вашему API. Вы получите те же результаты, но более эффективным способом.
если у вас есть пример, вы можете добавить его сюда
где изображения, которые вы пытаетесь загрузить?