Hay una forma de convertir un InputStream en un String y codificarlo en base64, ¿verdad?
En mi función, obtengo el parámetro InputStream y necesito insertarlo en el campo BLOB en mi tabla de base de datos Oracle.
¿Hay una manera de hacer eso?
(Mi objeto de base de datos contiene un campo de cadena para guardar la imagen, pero no encuentro ninguna forma de convertir InputStream a cadena en formato base 64).
Puedes probar algo como esto usando la API Base64.
InputStream finput = new FileInputStream(file); byte[] imageBytes = new byte[(int)file.length()]; finput.read(imageBytes, 0, imageBytes.length); finput.close(); String imageStr = Base64.encodeBase64String(imageBytes);Utilizar este:
Hay una buena manera de hacer esto usando IOUtils para convertir InputStream en una Byte Array ...
algo como
InputStream is; byte[] bytes = IOUtils.toByteArray(is); Aquí puede usar Base64 para convertir Byte Array a String .
Código de muestra
String encoded = Base64.getEncoder().encodeToString(bytes); Ahora puedes usar tu String .
La forma más sencilla sería usar IOUtils de apache-commons para hacer eso:
String result= IOUtils.toString(inputStream, ENCODING);De la documentación:
toString(byte[] entrada, codificación de cadena) Obtiene el contenido de un byte[] como una cadena usando la codificación de caracteres especificada.
Después de eso, para codificar/decodificar en Base64:
// Encode String resultBase64Encoded = Base64.getEncoder().encodeToString(result.getBytes("utf-8")); // Decode byte[] asBytes = Base64.getDecoder().decode(resultBase64Encoded); String resultAsStringAgain= String(asBytes, "utf-8")Nota: supongo que usa JDK 8 para la parte de codificación/descodificación.
Aparentemente, el OP solo quiere persistir un InputStream en la base de datos. Puedes hacerlo directamente usando JDBC:
InputStream inputStream = ......; String sql = "INSERT INTO TABLE_NAME(COLUMN_NAME) values (?)"; PreparedStatement statement = connection.prepareStatement(sql); statement.setBlob(1, inputStream); statement.executeUpdate();