java将inputStream转换为base64字符串
有一种方法可以将inputStream转换为字符串,并将其编码为base64,对吗? 在我的函数中,我获取InputStream参数,需要将其插入Oracle数据库表中的BLOB字段。有办法吗?(我的数据库对象包含用于保存图像的字符串字段,但我找不到任何方法将inputStream转换为base64格式的字符串)java将inputStream转换为base64字符串,java,string,base64,inputstream,Java,String,Base64,Inputstream,有一种方法可以将inputStream转换为字符串,并将其编码为base64,对吗? 在我的函数中,我获取InputStream参数,需要将其插入Oracle数据库表中的BLOB字段。有办法吗?(我的数据库对象包含用于保存图像的字符串字段,但我找不到任何方法将inputStream转换为base64格式的字符串) 谢谢大家! 最简单的方法是使用apache commons: String result= IOUtils.toString(inputStream, ENCODING); 从文件
谢谢大家! 最简单的方法是使用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();
您可以使用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);
使用以下命令:
正如我提到的,您不应该对二进制数据使用
字符串。base64编码的数据可以存储为字符串。但由于您的数据库列是一个blob,我将继续使用字节[]
使用IOUtils从输入流中获取字节[]
:
byte[] bytes = IOUtils.toByteArray(yourInputStream);
byte[] encoded = java.util.Base64.getEncoder().encode(bytes);
然后将其写入数据库。使用jdbc和PreparedStatement编写blob如下所示:
yourPreparedStatement.setBytes(nIndex, encoded);
有一种很好的方法可以做到这一点,那就是使用将InputStream转换为字节数组
类似于
InputStream is;
byte[] bytes = IOUtils.toByteArray(is);
String encoded = Base64.getEncoder().encodeToString(bytes);
在这里,您可以使用Base64
将字节数组
转换为字符串
示例代码
InputStream is;
byte[] bytes = IOUtils.toByteArray(is);
String encoded = Base64.getEncoder().encodeToString(bytes);
现在你可以使用你的字符串了
你试过什么了吗?如果输入流包含图像数据,请不要使用字符串
,但要使用字节[]
。好的,这是什么意思?我需要将此字段更改为字节[]?如何从inputStream将其转换为字节[]?谢谢新FileInputStream需要获取文件-我没有文件名。。。。我需要设置inputStream…只要您有inputStream就可以了。您可以使用前面提到的logicBase64.DEFAULT-get compilation error-DEFAULT is not字段。我需要做什么?@f1sh我知道,但这是OP要求的。那么我能做什么?在将图像数据插入DB blob之前,我应该将其放在何处?@foo如果您只想将InputStream保存到DB中,您可以直接执行,而无需将其转换为任何其他内容…@foo请参阅我关于如何将InputStream作为blob直接持久化到DBTo mee的更新答案。这是一种更节省内存的方式,字节[]在被接受的答案中,你会吃掉它。您不需要临时空间来持久化流。我需要添加哪个导入?