Il existe un moyen de convertir inputStream en String, et de l'encoder en base64? Dans ma fonction, j'obtiens un paramètre InputStream, et j'ai besoin de l'insérer dans mon champ DB-oracle BLOB, il y a un moyen de le faire? (mon objet contient un champ String pour enregistrer l'image à l'intérieur, mais je ne trouve aucun moyen de convertir l'inputStream en String au format base64) Merci!java convert inputStream en base64 string
Répondre
Vous pouvez essayer quelque chose comme cela en utilisant l'API base64.
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);
Utilisez ceci:
Comme je l'ai mentionnénouveau FileInputStream besoin d'obtenir le fichier - Je n'ai pas de nom de fichier .... Je dois définir inputStream .... – foo
cela devrait être ok aussi longtemps que vous avez InputStream avec vous. vous utilisez la logique mentionnée – mhasan
Base64.DEFAULT - get compilation error - DEFAULT n'est pas un champ. quel shuld je dois faire? – foo
La façon la plus simple serait d'utiliser IOUtils de apache-communes pour le faire:
String result= IOUtils.toString(inputStream, ENCODING);
De la documentation:
toString (octet d'entrée [], l'encodage String) Obtient la contenu d'un octet [] en tant que chaîne utilisant le codage de caractères spécifié.
Après cela Pour Encode/Décodage en base64:
// Encode
String resultBase64Encoded = Base64.getEncoder().encodeToString(result.getBytes("utf-8"));
// Decode
byte[] asBytes = Base64.getDecoder().decode(resultBase64Encoded);
String resultAsStringAgain= String(asBytes, "utf-8")
Note: Je suppose que vous utilisez 8 pour la JDK partie Coder/Décoder.
Apparemment, l'OP veut simplement conserver un InputStream dans le DB. Vous pouvez le faire en utilisant JDBC directement:
InputStream inputStream = ......;
String sql = "INSERT INTO TABLE_NAME(COLUMN_NAME) values (?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setBlob(1, inputStream);
statement.executeUpdate();
, vous ne devriez pas utiliser String
pour les données binaires. Les données codées en base64 peuvent cependant être stockées en tant que chaîne. Mais puisque votre colonne de base de données est un blob, je continuerais à travailler avec un byte[]
.
Utilisez IOUtils pour obtenir un byte[]
du InputStream
:
byte[] bytes = IOUtils.toByteArray(yourInputStream);
byte[] encoded = java.util.Base64.getEncoder().encode(bytes);
écrire ensuite à la base de données. L'écriture d'un blob en utilisant jdbc et PreparedStatement ressemble à ceci:
yourPreparedStatement.setBytes(nIndex, encoded);
quelle importation je dois ajouter? – foo
Il est agréable façon de faire est d'utiliser IOUtils
pour convertir le InputStream en Byte Array
...
quelque chose comme
InputStream is;
byte[] bytes = IOUtils.toByteArray(is);
Ici, vous pouvez utiliser Base64
pour convertir Byte Array
en String
.
Exemple de code
String encoded = Base64.getEncoder().encodeToString(bytes);
vous pouvez maintenant utiliser votre String
.
Avez-vous essayé quelque chose? Si votre InputStream contient des données d'image, n'utilisez pas '' String'', utilisez '' byte [] ''. – f1sh
Ok, qu'est-ce que ça veut dire? Je dois changer ce champ à Byte []? et comment puis-je le convertir en Byte [] à partir de inputStream? Merci! – foo