有一種方法可以將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. 如何在Scala中將InputStream轉換爲base64字符串?
- 2. 將UTF字符串轉換爲InputStream
- 3. 將InputStream轉換爲字符串(telnet)
- 4. 將inputStream從ZipFile轉換爲字符串
- 5. 將字符串轉換爲SHA1和base64
- 6. 將base64字符串轉換爲X509 certifcate
- 7. 將Base64字符串轉換爲UIImage
- 8. VB.NET - 將MP3轉換爲Base64字符串
- 9. 如何將InputStream轉換爲Java中的字符串?
- 10. 將Base64字符串轉換爲Java中的字節值字符串
- 11. 將.net字符串對象轉換爲base64編碼字符串
- 12. 將BASE64字符串轉換爲BASE16(HEX)字符串?
- 13. BlackBerry InputStream轉換爲字符串
- 14. Java:將InputStream轉換爲OutputStream
- 15. 將Base64轉換爲Java中的二進制字符串
- 16. 如何將圖像轉換爲java中的base64字符串?
- 17. 如何將java.sql.blob轉換爲java中的base64編碼字符串
- 18. 將base64字符串轉換爲Java中的圖像
- 19. 如何在Java中將int數組轉換爲base64字符串?
- 20. 如何將Base64轉換爲Java中的字符串(用於pdf)
- 21. Java - 將字符串轉換爲字符[]
- 22. 將SAX ContentHandler字符(..)轉換爲InputStream
- 23. Java - 將字節[]轉換爲字符串
- 24. 從findWithinHorizon返回的Java大字符串轉換爲InputStream
- 25. 如何將InputStream轉換爲字符串到Java中的字節數組?
- 26. Base64編碼的InputStream字符串
- 27. 如何從InputStream獲取Base64字符串?
- 28. 將NSData轉換爲Java字符串
- 29. java將字符串轉換爲UTF
- 30. Java - 將字符串轉換爲列表
你嘗試過什麼嗎?如果您的InputStream包含圖像數據,請不要使用「String」,而應使用「byte []''。 – f1sh
好的,這是什麼意思?我需要將此字段更改爲字節[]?以及如何將它從inputStream轉換爲Byte []?謝謝! – foo