mirror of https://github.com/interlegis/sapl.git
joaohortsenado
2 years ago
committed by
GitHub
1 changed files with 57 additions and 0 deletions
@ -0,0 +1,57 @@ |
|||
import os |
|||
import base64 |
|||
import re |
|||
from django.apps import apps |
|||
from django.core.files.base import ContentFile |
|||
from django.core.files.storage import default_storage |
|||
|
|||
|
|||
def extract_images(app_name, model_name, field_name, object_id=None): |
|||
# Expressão regular para identificar a propriedade 'src' da imagem em base64 |
|||
image_data_re = re.compile(r'src=\"data:image/(?P<type>[a-z]+);base64,(?P<data>[^"]+)\"') |
|||
|
|||
try: |
|||
Model = apps.get_model(app_name, model_name) |
|||
except LookupError: |
|||
print(f'O modelo "{model_name}" no aplicativo "{app_name}" não existe.') |
|||
return |
|||
|
|||
# Obter todos os objetos ou um objeto específico |
|||
if object_id is None: |
|||
objects = Model.objects.all() |
|||
else: |
|||
objects = [Model.objects.get(id=object_id)] |
|||
|
|||
for obj in objects: |
|||
new_text = getattr(obj, field_name) # cópia do texto original |
|||
for match in image_data_re.finditer(new_text): |
|||
image_data = match.group('data') |
|||
image_type = match.group('type') |
|||
|
|||
# Decodifica os dados da imagem em base64 |
|||
decoded_image = base64.b64decode(image_data) |
|||
# Cria um objeto Django ContentFile para a imagem decodificada |
|||
image_file = ContentFile(decoded_image) |
|||
# Constroi um nome de arquivo |
|||
filename = f'{obj.id}_{match.start()}.{image_type}' |
|||
|
|||
# Caminho personalizado para salvar o arquivo |
|||
# Exemplo: sapl/public/dispositivo/123 |
|||
# todo: verificar se isso pode causar problemas com o armazenamento padrão |
|||
folder_path = os.path.join('sapl', 'public', model_name.lower(), str(obj.id)) |
|||
|
|||
# Salva o arquivo de imagem no armazenamento |
|||
path = default_storage.save(os.path.join(folder_path, filename), image_file) |
|||
|
|||
# Substitui a propriedade 'src' da imagem pelos dados da imagem pela URL da imagem salva |
|||
new_text = new_text.replace(match.group(), f'src="{default_storage.url(path)}"') |
|||
print(f'Imagem salva em {path}') |
|||
|
|||
# Atualiza o campo com o novo texto |
|||
print(f'Novo texto: {new_text}') |
|||
setattr(obj, field_name, new_text) |
|||
obj.save() |
|||
|
|||
# Exemplo de uso: |
|||
# extract_images('compilacao', 'Dispositivo', 'texto') |
|||
# extract_images('compilacao', 'Dispositivo', 'texto', object_id=123) |
Loading…
Reference in new issue