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);
используйте этот:
есть хороший способ сделать это с помощью 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();