Python transformar base64 a archivo | Programador Web Valencia

Python transformar base64 a archivo

1 minuto

Python

Últimamente estoy recibiendo muchos archivos en formato base64 desde un frontend, y necesito convertirlos a archivos reales para trabajar con ellos (guardarlos, procesarlos, etc.).

Para ello he creado una función que recibe un string en formato base64 y lo convierte en un archivo temporal, devolviendo la ruta del archivo.

def temporary_file_from_base_64(base_64_input: str) -> str:
    """
    Convert a base64 string to a temporary file

    :param base_64_input: Base64 string

    :return: Path to the temporary file
    """
    base64_string = base_64_input.strip().split(',')[1]
    decoded_bytes = base64.b64decode(base64_string)
    file_temp, path_temp = tempfile.mkstemp()
    try:
        with os.fdopen(file_temp, 'wb') as tmp:
            tmp.write(decoded_bytes)
    except Exception as e:
        os.remove(path_temp)
        raise e
    return path_temp

Si vas a moverlo o procesarlo, recuerda eliminarlo a continuación:

import os

os.remove(path_temp)

Sino el sistema operativo no sabrá que ya no lo estás utilizando y se quedará ocupando espacio.

Como extra, también he creado una función que devuelve la extensión de un string base64:

from mimetypes import guess_extension

def get_extension_from_base64(base_64_input: str) -> str:
    """
    Get the extension of a base64 string

    :param base_64_input: Base64 string

    :return: Extension of the file
    """
    return guess_extension(base_64_input.split(';')[0].split(':')[1])

Puedes utilizar ambas ambas funciones para guardar el archivo con la extensión correcta:

import os

base_64_input = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAA...'
path_temp = temporary_file_from_base_64(base_64_input)
os.rename(path_temp, os.path.join('statics', f'nombre-archivo{get_extension_from_base64(base_64_input)}'))

Ya podéis guardar y procesar vuestros archivos.

Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.

Atribución/Reconocimiento-NoComercial-SinDerivados 4.0 Internacional

¿Me invitas a un café? ☕

Puedes hacerlo usando el terminal.

ssh customer@andros.dev -p 5555

Comentarios

{{ comments.length }} comentarios

Nuevo comentario

Nueva replica  {{ formatEllipsisAuthor(replyComment.author) }}

Acepto la política de Protección de Datos.

Escribe el primer comentario

Tal vez también te interese...