InputStreamをStringに変換し、base64にエンコードする方法はありますか?私の関数では、InputStream paramを取得し、それをOracleデータベーステーブルのBLOBフィールドに挿入する必要があります。それを行う方法はありますか? (私のデータベースオブジェクトには画像を保存する文字列フィールドが含まれていますが、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
を使用してInputStreamをByte Array
...に変換するのが良い方法です。
何か
InputStream is;
byte[] bytes = IOUtils.toByteArray(is);
ここでは、Base64
を使用してByte Array
をString
に変換できます。
サンプルコード
String encoded = Base64.getEncoder().encodeToString(bytes);
これで、String
を使用できます。
最も簡単な方法は、Apache-commonsの IOUtils を使用して行うことです。
String result= IOUtils.toString(inputStream, ENCODING);
ドキュメントから:
toString(byte [] input、String encoding)指定された文字エンコーディングを使用して、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")
注:Encode/Decodeパートに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();
前述したように、バイナリデータにString
を使用しないでください。ただし、base64でエンコードされたデータはStringとして保存できます。ただし、データベース列はblobなので、byte[]
を引き続き使用します。
IOUtilsを使用して、InputStream
からbyte[]
を取得します。
byte[] bytes = IOUtils.toByteArray(yourInputStream);
byte[] encoded = Java.util.Base64.getEncoder().encode(bytes);
次に、データベースに書き込みます。 jdbcとPreparedStatementを使用してblobを記述すると、次のようになります。
yourPreparedStatement.setBytes(nIndex, encoded);