import boto3
from botocore.exceptions import NoCredentialsError, ClientError
# === CONFIGURAÇÕES AWS ===
AWS_ACCESS_KEY = "SEU_ACCESS_KEY"
AWS_SECRET_KEY = "SEU_SECRET_KEY"
AWS_REGION = "us-east-1"
# === CONFIGURAÇÕES DO ARQUIVO E BUCKET ===
BUCKET_NAME = "meu-bucket-privado"
ARQUIVO_LOCAL = "exemplo.txt" # arquivo local a ser enviado
ARQUIVO_NO_S3 = "uploads/exemplo.txt" # caminho do arquivo dentro do bucket
# === INICIALIZA CLIENTE S3 ===
s3 = boto3.client(
's3',
aws_access_key_id=AWS_ACCESS_KEY,
aws_secret_access_key=AWS_SECRET_KEY,
region_name=AWS_REGION
)
def criar_bucket():
"""Cria o bucket se não existir"""
try:
# Verifica se o bucket já existe
s3.head_bucket(Bucket=BUCKET_NAME)
print(f"ℹ️ Bucket '{BUCKET_NAME}' já existe.")
except ClientError as e:
# Se não existir, cria o bucket privado
if e.response['Error']['Code'] == '404':
print(f"🪣 Criando bucket '{BUCKET_NAME}'...")
s3.create_bucket(
Bucket=BUCKET_NAME,
CreateBucketConfiguration={'LocationConstraint': AWS_REGION}
)
print(f"✅ Bucket '{BUCKET_NAME}' criado com sucesso.")
else:
print(f"❌ Erro ao verificar/criar bucket: {e}")
def upload_arquivo():
"""Faz upload de um arquivo local para o S3"""
try:
s3.upload_file(ARQUIVO_LOCAL, BUCKET_NAME, ARQUIVO_NO_S3)
print(f"✅ Upload concluído: {ARQUIVO_LOCAL} → s3://{BUCKET_NAME}/{ARQUIVO_NO_S3}")
except FileNotFoundError:
print("❌ Arquivo local não encontrado.")
except NoCredentialsError:
print("❌ Credenciais AWS inválidas.")
except ClientError as e:
print(f"❌ Erro no upload: {e}")
def download_arquivo():
"""Baixa um arquivo do S3"""
destino = "baixado_" + ARQUIVO_LOCAL
try:
s3.download_file(BUCKET_NAME, ARQUIVO_NO_S3, destino)
print(f"✅ Download concluído: s3://{BUCKET_NAME}/{ARQUIVO_NO_S3} → {destino}")
except ClientError as e:
if e.response['Error']['Code'] == "404":
print("❌ Arquivo não encontrado no bucket.")
else:
print(f"❌ Erro no download: {e}")
def gerar_url_temporaria():
"""Gera uma URL temporária para download (válida por 1h)"""
try:
url = s3.generate_presigned_url(
'get_object',
Params={'Bucket': BUCKET_NAME, 'Key': ARQUIVO_NO_S3},
ExpiresIn=3600
)
print(f"🔗 URL temporária (1h): {url}")
except Exception as e:
print(f"❌ Erro ao gerar URL temporária: {e}")
if __name__ == "__main__":
criar_bucket()
upload_arquivo()
download_arquivo()
gerar_url_temporaria()