- Create application properties for database configuration - Implement user entity and DTO with Base64 image handling - Add user controller for CRUD operations - Introduce Base64 converter utility for image encoding/decoding - Set up Maven wrapper and project dependencies - Configure .gitignore and .gitattributes for environment consistency
141 lines
3.2 KiB
Markdown
141 lines
3.2 KiB
Markdown
# Guía: Crear Usuaria con Imagen en Base64
|
|
|
|
## Descripción General
|
|
|
|
Ahora puedes crear una usuaria con una imagen enviando la imagen como una cadena Base64 en el JSON del POST request. El sistema se encargará de convertir automáticamente el Base64 a bytes para almacenarla en la base de datos.
|
|
|
|
## Cambios Realizados
|
|
|
|
### 1. **UsuariaDto.java**
|
|
- Cambié el campo `img` de `byte[]` a `String`
|
|
- Ahora acepta Base64 en lugar de bytes
|
|
|
|
### 2. **Base64Converter.java** (Nuevo)
|
|
- Clase utilitaria con métodos para convertir entre Base64 y bytes
|
|
- Incluye manejo de errores para Base64 inválido
|
|
|
|
### 3. **UsuariaMapper.java**
|
|
- Integración con MapStruct para convertir automáticamente:
|
|
- `toEntity()`: Convierte `String` (Base64) → `byte[]`
|
|
- `toDto()`: Convierte `byte[]` → `String` (Base64)
|
|
- `partialUpdate()`: Maneja actualizaciones parciales
|
|
|
|
## Cómo Usar
|
|
|
|
### Crear Usuaria con Imagen
|
|
|
|
```bash
|
|
POST http://localhost:8080/usuaria
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"id": 80,
|
|
"fechaElim": null,
|
|
"fechaNac": "2026-12-08",
|
|
"img": "kjhadfjklaghshjldfgajhsdf==",
|
|
"nombre": "pasda",
|
|
"pass": "asdad",
|
|
"username": "asdad",
|
|
"idTipoUsuario": null
|
|
}
|
|
```
|
|
|
|
### Obtener Usuaria (La imagen se devuelve en Base64)
|
|
|
|
```bash
|
|
GET http://localhost:8080/usuaria/80
|
|
```
|
|
|
|
Response:
|
|
```json
|
|
{
|
|
"id": 80,
|
|
"fechaElim": null,
|
|
"fechaNac": "2026-12-08",
|
|
"img": "kjhadfjklaghshjldfgajhsdf==",
|
|
"nombre": "pasda",
|
|
"pass": "asdad",
|
|
"username": "asdad",
|
|
"idTipoUsuario": null
|
|
}
|
|
```
|
|
|
|
## Notas Importantes
|
|
|
|
1. **Base64 Válido**: La cadena debe ser Base64 válido. Si no lo es, se guardará como `null`.
|
|
2. **Imagen Opcional**: Si no envías el campo `img` o es `null`, se almacenará como `null`.
|
|
3. **Conversión Automática**: Todo ocurre automáticamente gracias a MapStruct. No necesitas hacer nada más.
|
|
|
|
## Generación de Base64
|
|
|
|
Para generar una cadena Base64 de una imagen, puedes usar:
|
|
|
|
### En JavaScript (Frontend):
|
|
```javascript
|
|
const file = document.getElementById('imageInput').files[0];
|
|
const reader = new FileReader();
|
|
reader.onload = (e) => {
|
|
const base64String = e.target.result.split(',')[1];
|
|
// Usar base64String en el JSON
|
|
};
|
|
reader.readAsDataURL(file);
|
|
```
|
|
|
|
### En Java:
|
|
```java
|
|
import java.util.Base64;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Paths;
|
|
|
|
byte[] imageBytes = Files.readAllBytes(Paths.get("path/to/image.png"));
|
|
String base64String = Base64.getEncoder().encodeToString(imageBytes);
|
|
```
|
|
|
|
### En Python:
|
|
```python
|
|
import base64
|
|
|
|
with open('image.png', 'rb') as f:
|
|
base64_string = base64.b64encode(f.read()).decode('utf-8')
|
|
```
|
|
|
|
## Errores Comunes
|
|
|
|
1. **Invalid Base64**: Si envías una cadena que no sea Base64 válido, se ignorará y se guardará como `null`.
|
|
2. **Null String**: Si el campo `img` es `null`, se guardará como `null` en la base de datos.
|
|
|
|
## Arquitectura de la Solución
|
|
|
|
```
|
|
UsuariaController (POST)
|
|
↓
|
|
UsuariaDto (img: String)
|
|
↓
|
|
UsuariaMapper.toEntity()
|
|
↓
|
|
Base64Converter.base64ToBytes()
|
|
↓
|
|
Usuaria Entity (img: byte[])
|
|
↓
|
|
UsuariaRepository.save()
|
|
↓
|
|
Base de Datos (BLOB)
|
|
```
|
|
|
|
Cuando obtienes la usuaria:
|
|
|
|
```
|
|
Base de Datos (BLOB)
|
|
↓
|
|
Usuaria Entity (img: byte[])
|
|
↓
|
|
UsuariaMapper.toDto()
|
|
↓
|
|
Base64Converter.bytesToBase64()
|
|
↓
|
|
UsuariaDto (img: String)
|
|
↓
|
|
Response JSON
|
|
```
|
|
|