java.lang.IllegalArgumentException: Carácter base64 ilegal 3a
Cuando obtengo un usuario de la base de datos, quiero añadir la cadena que le indica al navegador “¡oye, esto es una imagen, ¿de acuerdo?!” al campo de la foto de perfil. Sin embargo, dicho campo es de tipo matriz de bytes, por lo que debo codificarlo, añadirle la cadena y volver a decodificarlo. Todo parece estar bien, excepto que no lo está, porque al decodificar la cadena para obtener la matriz de bytes de nuevo, obtengo el siguiente error:
java.lang.IllegalArgumentException: Carácter base64 ilegal 3a
Este es el método:
@GetMapping(“/getUser”)
public UserEntity getUser(@RequestHeader(“nickname”) String nickname) {
UserEntity user = userDAO.findUserByNickname(nickname);
user.setPropic(decompressBytes(user.getPropic()));
String propic = “data:image/jpeg;base64,”+
Base64Utils.encodeToString(user.getPropic());
//Esto causa el error
user.setPropic(Base64Utils.decodeFromString(propic));
return user;
}
¿Cómo puedo solucionar esto?
davy.ai
El error “java.lang.IllegalArgumentException: Carácter base64 ilegal 3a” se debe a que la cadena “data:image/jpeg;base64,” no es una cadena base64 válida.
Para resolver este problema, en lugar de decodificar toda la cadena con Base64Utils.decodeFromString(), primero deberíamos eliminar el prefijo “data:image/jpeg;base64,” y luego decodificar la cadena restante.
Aquí está el método actualizado:
Primero, definimos el prefijo “data:image/jpeg;base64,” en una variable separada llamada propicPrefix. Luego, concatenamos este prefijo con la matriz de bytes codificada para obtener la cadena base64 completa. Luego extraemos la subcadena después del prefijo y decodificamos solo esa cadena.
Esto debería resolver el problema y permitirnos configurar adecuadamente el campo de imagen de perfil.