java преобразует inputStream в строку base64

есть способ преобразовать inputStream в строку и закодировать ее в base64, верно? В моей функции я получаю InputStream param и должен вставить его в поле BLOB в моей таблице базы данных Oracle. Есть ли способ сделать это? (мой объект базы данных содержит строковое поле для сохранения изображения, но я не нахожу способа преобразовать inputStream в string в формате base64) Спасибо!

4 ответов


вы можете попробовать что-то подобное с помощью 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);

используйте этот:

http://commons.apache.org/proper/commons-codec/archives/1.9/apidocs/org/apache/commons/codec/binary/Base64.html


есть хороший способ сделать это с помощью IOUtils для преобразования InputStream в Byte Array...

что-то вроде

    InputStream is;
    byte[] bytes = IOUtils.toByteArray(is);

здесь вы можете использовать Base64 преобразование Byte Array to String.

Пример Кода

    String encoded = Base64.getEncoder().encodeToString(bytes);

теперь вы можете использовать свой String.


как я уже упоминал, вы не должны использовать String для двоичных данных. Однако данные, закодированные в base64, могут храниться как строка. Но поскольку ваш столбец базы данных является blob, я бы продолжил работу с byte[].

используйте IOUtils, чтобы получить byte[] С InputStream:

byte[] bytes = IOUtils.toByteArray(yourInputStream);
byte[] encoded = java.util.Base64.getEncoder().encode(bytes);

затем запишите его в базу данных. Написание blob с помощью jdbc и PreparedStatement выглядит следующим образом:

yourPreparedStatement.setBytes(nIndex, encoded);

самый простой способ-использовать IOUtils от apache-commons, чтобы сделать это:

String result= IOUtils.toString(inputStream, ENCODING); 

из документации:

toString (байт [] вход, кодировка строк) Возвращает содержимое байта[] в виде строки, используя указанную кодировку символов.

после этого закодировать / декодировать в Base64:

// Encode 
String resultBase64Encoded = Base64.getEncoder().encodeToString(result.getBytes("utf-8"));


// Decode
byte[] asBytes = Base64.getDecoder().decode(resultBase64Encoded);
String resultAsStringAgain= String(asBytes, "utf-8")

Примечание: я предполагаю, что вы используете JDK 8 для кодирования / декодирования часть.

по-видимому, OP хочет просто сохранить InputStream в DB. Вы можете сделать это напрямую, используя JDBC:

InputStream inputStream = ......;
String sql = "INSERT INTO TABLE_NAME(COLUMN_NAME) values (?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setBlob(1, inputStream);
statement.executeUpdate();