有一种方法可以将inputStream转换为String,并将其编码为base64? 在我的函数我得到InputStream参数,并需要将其插入到我的DB-oracle BLOB字段有一种方法来做到这一点? (我的对象包含字符串字段来保存图像里面,但我没有找到任何方式将inputStream转换为以base64格式的字符串) 谢谢!java将inputStream转换为base64字符串
2
A
回答
5
你可以使用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);
使用此:
1
最简单的方法是使用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();
1
正如我提到的,你不应该使用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);
+0
我需要添加哪些进口? – foo
2
有很好的办法做到这一点是使用IOUtils
到的InputStream转换为Byte Array
...
像
InputStream is;
byte[] bytes = IOUtils.toByteArray(is);
在这里您可以使用Base64
将Byte Array
转换为String
。
示例代码
String encoded = Base64.getEncoder().encodeToString(bytes);
现在你可以使用你的String
。
相关问题
- 1. 将base64字符串转换为X509 certifcate
- 2. 如何将InputStream转换为Java中的字符串?
- 3. 将Base64字符串转换为Java中的字节值字符串
- 4. BlackBerry InputStream转换为字符串
- 5. 将.net字符串对象转换为base64编码字符串
- 6. 将BASE64字符串转换为BASE16(HEX)字符串?
- 7. 如何将java.sql.blob转换为java中的base64编码字符串
- 8. 将Base64转换为Java中的二进制字符串
- 9. 如何在Java中将int数组转换为base64字符串?
- 10. Java - 将字符串转换为字符[]
- 11. 将SAX ContentHandler字符(..)转换为InputStream
- 12. Java - 将字节[]转换为字符串
- 13. Base64编码的InputStream字符串
- 14. 无法将字符串转换为InputStream来解析XML
- 15. 将InputStream的Latin-1内容转换为UTF-8字符串
- 16. Java - CoreNLP将字符串转换为树
- 17. Java:将double转换为字符串
- 18. java将元素转换为字符串
- 19. 将Java字符串转换为Json
- 20. java将字符串转换为UTF
- 21. 将Java字符串转换为数组
- 22. 将对象转换为字符串(java)
- 23. 将Java字符串转换为数组
- 24. 将字符串转换为blob java
- 25. Java将字符串转换为整数
- 26. Java - 将字符串转换为列表
- 27. 将流转换为字符串Java/Groovy
- 28. 将NSData转换为Java字符串
- 29. Java:将字符串转换为日期
- 30. 将Java字符串转换为sql.Timestamp
你尝试过什么吗?如果您的InputStream包含图像数据,请不要使用“String”,而应使用“byte []''。 – f1sh
好的,这是什么意思?我需要将此字段更改为字节[]?以及如何将它从inputStream转换为Byte []?谢谢! – foo