java将inputStream转换为base64字符串
有一种方法可以将inputStream转换为String,并将其编码为base64? 在我的函数我得到InputStream参数,并需要将其插入到我的DB-oracle BLOB字段有一种方法来做到这一点? (我的对象包含字符串字段来保存图像里面,但我没有找到任何方式将inputStream转换为以base64格式的字符串) 谢谢!java将inputStream转换为base64字符串
你可以使用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);
使用此:
最简单的方法是使用IOUtils从Apache的公地做到这一点:
String result= IOUtils.toString(inputStream, ENCODING);
从文档:
的toString(字节[]输入,字符串编码) 获取一个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保存到数据库中。你可以直接使用JDBC来做到这一点:
InputStream inputStream = ......;
String sql = "INSERT INTO TABLE_NAME(COLUMN_NAME) values (?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setBlob(1, inputStream);
statement.executeUpdate();
正如我提到的,你不应该使用String
二进制数据。尽管base64编码的数据可以存储为字符串。但是由于你的数据库列是一个blob,我会继续使用byte[]
。
使用IOUtils来从InputStream
一个byte[]
:
byte[] bytes = IOUtils.toByteArray(yourInputStream);
byte[] encoded = java.util.Base64.getEncoder().encode(bytes);
然后将其写入到数据库中。使用JDBC写BLOB和一个PreparedStatement看起来是这样的:
yourPreparedStatement.setBytes(nIndex, encoded);
我需要添加哪些进口? – foo
有很好的办法做到这一点是使用IOUtils
到的InputStream转换为Byte Array
...
像
InputStream is;
byte[] bytes = IOUtils.toByteArray(is);
在这里您可以使用Base64
将Byte Array
转换为String
。
示例代码
String encoded = Base64.getEncoder().encodeToString(bytes);
现在你可以使用你的String
。
你尝试过什么吗?如果您的InputStream包含图像数据,请不要使用“String”,而应使用“byte []''。 – f1sh
好的,这是什么意思?我需要将此字段更改为字节[]?以及如何将它从inputStream转换为Byte []?谢谢! – foo