Как загрузить файл в определенную папку в S3 по Boto3 - PullRequest
1 голос
/ 01 июня 2019

Как загрузить файл на S3 в указанную папку?

Папка создана как year/month/day/uuid/

Я использовал boto3 и создал папку в корзине S3.

def create_Object(bucket_name):   
    s3 = boto3.resource('s3')
    now = datetime.now()
    year=now.strftime("%Y")
    month=now.strftime("%m")
    day=now.strftime("%d")
    uuidf=uuid.uuid4()
    obj_key=year+"/"+month+"/"+day+"/"+str(uuidf)
    print(obj_key)
    objRe=s3.upload_file(obj_key, bucket_name, "testfile.txt")

После загрузки мне нужно отправить сообщение в SQS.Как я могу это сделать?

1 Ответ

1 голос
/ 02 июня 2019

Будьте осторожны - при вызове upload_file у вас есть локальный файл и ключ S3.

Вот код, который загрузит данный файл в путь Y/M/D/random/, а затем отправитсообщение для SQS:

import boto3
from datetime import datetime
import uuid

LOCAL_FILE = 'file.txt'
BUCKET = 'my-bucket'
SQS_QUEUE = 'https://sqs.ap-southeast-2.amazonaws.com/123456789012/foo'

# Upload file to Y/M/D/random-id/filename
s3_client = boto3.client('s3', region_name='ap-southeast-2')
path = datetime.now().strftime("%Y/%m/%d/") + str(uuid.uuid4()) + '/'
print(path)
response = s3_client.upload_file(LOCAL_FILE, BUCKET, path + LOCAL_FILE)

# Send a message to SQS
sqs_client = boto3.client('sqs', region_name='ap-southeast-2')
response = sqs_client.send_message(
    QueueUrl = SQS_QUEUE,
    MessageBody = 'New file is: ' + path + LOCAL_FILE
    )
...