java将inputStream转换为base64字符串

时间:2017-03-08 09:48:58

标签: java string base64 inputstream

有一种方法可以将inputStream转换为String,并将其编码为base64,对吧? 在我的函数中,我得到了InputStream param,需要将它插入到我的Oracle数据库表的BLOB字段中。有没有办法做到这一点? (我的数据库对象包含保存图像的字符串字段,但我找不到任何方法将inputStream转换为base64格式的字符串) 谢谢!

4 个答案:

答案 0 :(得分:13)

您可以使用Base64 API尝试这样的事情。

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

答案 1 :(得分:6)

有一种很好的方法可以使用IOUtils 将InputStream转换为Byte Array ...

类似

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

您可以使用Base64Byte Array转换为String

示例代码

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

现在您可以使用String

答案 2 :(得分:1)

最简单的方法是使用apache-commons中的IOUtils来做到这一点:

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

来自文档:

  

toString(byte []输入,字符串编码)   使用指定的字符编码以字符串形式获取byte []的内容。

之后在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();

答案 3 :(得分:1)

正如我所提到的,你不应该将String用于二进制数据。 base64编码的数据可以存储为String。但由于您的数据库列是blob,我将继续使用byte[]

使用IOUtils从byte[]获取InputStream

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

然后将其写入数据库。使用jdbc和PreparedStatement编写blob如下所示:

yourPreparedStatement.setBytes(nIndex, encoded);