Bonjour à tous,
Je developpe le client d'un webservice.
Un des paramètres que je dois envoyer dans une fonction est une string contenant la base64 d'une image.
Je ne trouve pas de solution fonctionelle, quelqu'un a la réponse ?
Merci d'avance
Bonjour à tous,
Je developpe le client d'un webservice.
Un des paramètres que je dois envoyer dans une fonction est une string contenant la base64 d'une image.
Je ne trouve pas de solution fonctionelle, quelqu'un a la réponse ?
Merci d'avance
dans commosn codec, tu trouvera la classe org.apache.commons.codec.binary.Base64
pour faire de l'encodage en base64
Merci pour ta (rapide) réponse,
J'ai utilisé la classe que tu as marqué de cette manière:
La paramètre que je doit passer est un String. Par contre de cette façon je lève une exception:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 File image = new File("url/image.jpg"); String imgString = new String(Base64.encodeBase64(image.toString().getBytes()));
Y a t'il une meilleure méthode ?AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server
faultSubcode:
faultString: Cannot use object of type stdClass as array
Je suis pas sur que ca fasse ce que tu veux. Ca va encoder en base64 la réprésentaiton binaire dans l'encodage par défaut de la jvm de la chaine "java.io.File@56239"
Code : Sélectionner tout - Visualiser dans une fenêtre à part String imgString = new String(Base64.encodeBase64(image.toString().getBytes()))
Si tu veux envoyer le contenur de l'image, il faut la lire avec un FileInputStream dans un tableau de byte[] avant de la convertir en base64!
J'ai suivis ton conseil et j'ai trouvé un bout de code qui le fait pour moi:
Le problème étant que mon paramètre doit être passé en String et que:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 public static byte[] getBytesFromFile(File file) throws IOException { InputStream is = new FileInputStream(file); // Get the size of the file long length = file.length(); // You cannot create an array using a long type. // It needs to be an int type. // Before converting to an int type, check // to ensure that file is not larger than Integer.MAX_VALUE. if (length > Integer.MAX_VALUE) { // File is too large } // Create the byte array to hold the data byte[] bytes = new byte[(int)length]; // Read in the bytes int offset = 0; int numRead = 0; while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) { offset += numRead; } // Ensure all the bytes have been read in if (offset < bytes.length) { throw new IOException("Could not completely read file "+file.getName()); } // Close the input stream and return bytes is.close(); return bytes; }
me renvois un Object.
Code : Sélectionner tout - Visualiser dans une fenêtre à part org.apache.commons.codec.binary.Base64.encodeBase64(byte[] binaryData)
Y'a t'il une méthode annexe qui renvois une String ?
[Edit]Alors au temps pour moi, la méthode renvois un byte[] et non pas un Object, dans ce cas, la réponse s'impose d'elle même, désolé pour le post et merci pour ta réponse[/Edit]
Salut,
Attention à ta méthode getBytesFromFile() qui ne ferme pas correctement le flux dans tous les cas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 public static byte[] getBytesFromFile(File file) throws IOException { // Get the size of the file long length = file.length(); if (length > Integer.MAX_VALUE) { // File is too large throw new IOException("File is too large"); } // Create the byte array to hold the data byte[] bytes = new byte[(int) length]; InputStream is = new FileInputStream(file); try { // Read in the bytes int offset = 0; int numRead = 0; while (offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) { offset += numRead; } // Ensure all the bytes have been read in if (offset < bytes.length) { throw new IOException("Could not completely read file " + file.getName()); } } finally { // Close the input stream and return bytes is.close(); } return bytes; }
Sinon encodeBase64() ne renvoi pas un objet quelconque mais un byte[] qu'il te suffira de convertir en chaine :
a++
Code : Sélectionner tout - Visualiser dans une fenêtre à part new String(bytes, "ASCII");
Merci pour ces précisions,
J'obtiens désormais quelquechose de cohérent dans ma String, mais j'ai toujours une erreur renvoyé par le serveur de WS:
Je me demande du coup si le codage "ASCII" est le bon ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server faultSubcode: faultString: Cannot use object of type stdClass as array faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}stackTrace:Cannot use object of type stdClass as array
L'erreur peut elle venir d'ailleur ?
Bonjour,
Je pense que tu peux trouver qq chose dans ce lien :
http://home.tele2.fr/bobremy/code_so...html#rubrique2
Partager