es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for 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:

    @GetMapping("/getUser")
    public UserEntity getUser(@RequestHeader("nickname") String nickname) {
        UserEntity user = userDAO.findUserByNickname(nickname);
        user.setPropic(decompressBytes(user.getPropic()));
        String propicPrefix = "data:image/jpeg;base64,";
        String propic = propicPrefix + Base64Utils.encodeToString(user.getPropic());
        String propicWithoutPrefix = propic.substring(propicPrefix.length());
        user.setPropic(Base64Utils.decodeFromString(propicWithoutPrefix));
        return user;
    }
    

    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.

Comments are closed.