testes/app/routes/upload_img.py

89 lines
3.1 KiB
Python

from flask_mysqldb import MySQL
from flask import Flask, Blueprint, jsonify, request
from .auth import token_required
import os
import traceback
import MySQLdb
imagem = Blueprint('imagem', __name__)
mysql = MySQL()
CAMINHO_PERFIL = "/var/www/Backend/itguys/ambiente_python/repositorio_img/perfil/"
CAMINHO_FUNDOS = "/var/www/Backend/itguys/ambiente_python/repositorio_img/fundos/"
def salvar_imagem(arquivo, tipo_imagem, nome_usuario):
"""Salva a imagem no diretório correspondente e retorna o caminho relativo"""
nome_arquivo = f"{nome_usuario}.jpg"
if tipo_imagem == "perfil":
caminho_diretorio = CAMINHO_PERFIL
caminho_relativo = f"perfil/{nome_arquivo}"
else:
caminho_diretorio = CAMINHO_FUNDOS
caminho_relativo = f"fundos/{nome_arquivo}"
caminho_completo = os.path.join(caminho_diretorio, nome_arquivo)
# Garante que o diretório existe
os.makedirs(caminho_diretorio, exist_ok=True)
# Salva a imagem
arquivo.save(caminho_completo)
return caminho_relativo # Retorna o caminho relativo para o banco de dados
def get_db_connection():
"""Verifica e retorna uma conexão válida com o banco de dados"""
try:
conn = mysql.connection
conn.ping() # Verifica se a conexão está ativa
return conn
except MySQLdb.OperationalError:
return mysql.connection # Tenta criar uma nova conexão
@imagem.route('/imagem', methods=['POST'])
@token_required
def receber_imagem(data):
try:
nome_usuario = data.get('user', '') # Separa o usuário do dominío
if not nome_usuario:
return jsonify({"status": "error", "message": "Usuário não autenticado!"}), 405
nome_usuario = nome_usuario.split('@')[0]
imagem_perfil = request.files.get('perfil')
imagem_foto_fundo = request.files.get('foto_fundo')
# Verifica se as imagens foram enviadas corretamente
if not imagem_perfil or not imagem_foto_fundo:
return jsonify({"status": "error", "message": "Imagens não enviadas corretamente!"}), 400
# Salva as imagens e obtém os caminhos relativos
caminho_perfil = salvar_imagem(imagem_perfil, "perfil", nome_usuario)
caminho_foto_fundo = salvar_imagem(imagem_foto_fundo, "fundo", nome_usuario)
# Conecta-se ao banco e executa a query de atualização
conn = get_db_connection()
cursor = conn.cursor()
query = """
UPDATE usuarios
SET img_perfil = %s, img_fundo = %s
WHERE usuario = %s
"""
valores = (caminho_perfil, caminho_foto_fundo, nome_usuario)
cursor.execute(query, valores)
conn.commit()
cursor.close()
return jsonify({"status": "success", "message": "Imagens enviadas e salvas com sucesso!"}), 200
except MySQLdb.OperationalError as e:
return jsonify({"status": "error", "message": f"Erro de conexão com o banco de dados: {str(e)}"}), 500
except Exception as e:
traceback.print_exc()
return jsonify({"status": "error", "message": str(e)}), 500