Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

transferer un gif sur le serveur

3 réponses
Avatar
J.M
Bonjour à tous,

Depuis une Applet, Je désire sauver une image java dans un fichier gif
sur le serveur.
En cherchant dans les archives, j'ai vu que je n'etais pas le premier a
vouloir le faire mais malheureusement, je n'ai pas trouvé d'exemple qui
fonctionne.

J'au un code qui marche presque mais le problème est que le fichier GIF
est tronqué des qu'une valeur 0 est rencontré dans le stream.

Voici le code java et le php qui ecrit l'image. Si quelqu'un a une
solution, je le remercie.

Merci,
Jean-Michel

try {
URL url = new URL(URLSave);
URLConnection uConn = url.openConnection();
uConn.setUseCaches(false);
uConn.setDoInput(true);
uConn.setDoOutput(true);
uConn.setRequestProperty("Content-transfer-encoding","binary");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream out = new
DataOutputStream(uConn.getOutputStream());
// Nom du fichier a sauver
String codedName = "name=" + URLEncoder.encode(file) + "&image=";
// Creation du gif a partie d'une image
GifEncoder encoder = new GifEncoder(panel.getOffscreen(), bos);
encoder.encode();

// Ecriture des parametres
out.writeBytes(codedName);
bos.writeTo(out);
out.flush();
out.close();
// Lecture reponse du serveur
DataInputStream is1 = new
DataInputStream(uConn.getInputStream());
String istr;
while ((istr = is1.readLine()) != null) {
System.out.println(istr);
}
is1.close();
} catch (Throwable ex) { System.err.println("Utils.read()
Exception:" + ex); }

Le PHP:
<?
$file = sprintf("/home/jmr/simbad/%s", $name);
$fp = fopen("$name", "wb");
if ($fp) {
fwrite($fp, $image);
fclose($fp);
echo "\nSAUVEGARDE DU GRAPHE GIF EFFECTUEE";
} else {
echo "ERREUR:IMPOSSIBLE DE SAUVEGARDER LE GRAPHE";
}
?>

3 réponses

Avatar
Emmanuel Puybaret
Bonjour,

Depuis une Applet, Je désire sauver une image java dans un fichier gif
sur le serveur.
En cherchant dans les archives, j'ai vu que je n'etais pas le premier a
vouloir le faire mais malheureusement, je n'ai pas trouvé d'exemple qui
fonctionne.


D'expérience, des élèves que j'ai aidés en juillet dernier ont réalisé ça
avec la méthode POST en utilisant un paramètre dont la valeur vaut l'image
GIF encodée en Base64 puis recodée en x-www-form-urlencoded. Ca grossit la
taille des données mais ça marchait impec...
De mémoire, avec un encoder Base64 du domaine public comme celui dispo à
http://iharder.sourceforge.net/base64/ , ça donnait un truc du genre :

try
{
// Création de l'image GIF
ByteArrayOutputStream bos = new ByteArrayOutputStream();
GifEncoder encoder = new GifEncoder(panel.getOffscreen(), bos);
encoder.encode();
byte [] imageBytes = bos.toByteArray ();
// Encodage de l'image au format Base64
String imageBase64 = Base64.encodeBytes (imageBytes);
// Encodage de l'image Base64 au x-www-form-urlencoded
String image = URLEncoder.encode (imageBase64);

URL url = new URL(URLSave);
HttpURLConnection uConn = (HttpURLConnection)url.openConnection();
uConn.setUseCaches(false);
uConn.setRequestMethod ("POST");

// Paramètres (nom du fichier et image)
String parameters = "name=" + URLEncoder.encode(file)
+ "&image=" + image;
OutputStream out = uConn.getOutputStream();
out.write (parameters.getBytes ());
out.close();

// ...
}
catch (Exception ex)
{
ex.printStackTrace ();
}

Ton problème avec cette solution c'est de trouver un décodeur Base64 en PHP
pour le serveur mais ça doit bien exister quelque part...

L'autre solution est de simuler depuis l'applet un formulaire HTML utilisant
l'encoding enctype="multipart/form-data" (qui permet d'uploader un fichier
sur un serveur). A toi de voir...
http://www.google.com/search?q=multipart/form-data+applet

Bonne chance et tiens nous au courant....

Bye
--
Emmanuel PUYBARET
Email :
Web : http://www.eteks.com
Auteur du Cahier du programmeur Java [1] / Editions Eyrolles :
http://www.eteks.com/services/cahierjava1.html

Avatar
J.M
Emmanuel Puybaret wrote:
Bonjour,


Depuis une Applet, Je désire sauver une image java dans un fichier gif
sur le serveur.
En cherchant dans les archives, j'ai vu que je n'etais pas le premier a
vouloir le faire mais malheureusement, je n'ai pas trouvé d'exemple qui
fonctionne.



D'expérience, des élèves que j'ai aidés en juillet dernier ont réalisé ça
avec la méthode POST en utilisant un paramètre dont la valeur vaut l'image
GIF encodée en Base64 puis recodée en x-www-form-urlencoded. Ca grossit la
taille des données mais ça marchait impec...
De mémoire, avec un encoder Base64 du domaine public comme celui dispo à
http://iharder.sourceforge.net/base64/ , ça donnait un truc du genre :



Bonjour Emmanuel,

Ca marche !. En php, il y a la fonction base64_decode qui va bien.
J'avais déja pensé à encoder l'image mais je me demandais s'il n'y avait
pas plus simple.
En tout cas, merci beaucoup pour la solution. Ca me va parfaitement.

Jean-Michel


Avatar
Ulrich Vachon
mouais...

C'est pas très "Java" comme soluce. Si tu as des contraintes serveurs qui
imposent du PHP uniquement, je peux comprendre, mais dans le cas contraire,
il aurait été plus convenable de bosser avec ou des servlets ou RMI, ou une
Applet certifiée.

Mais bon, si ca tourne tant mieux et bon code.
Ulrich Vachon


"J.M" a écrit dans le message de news:
blgkcq$noo$
Emmanuel Puybaret wrote:
Bonjour,


Depuis une Applet, Je désire sauver une image java dans un fichier gif
sur le serveur.
En cherchant dans les archives, j'ai vu que je n'etais pas le premier a
vouloir le faire mais malheureusement, je n'ai pas trouvé d'exemple qui
fonctionne.



D'expérience, des élèves que j'ai aidés en juillet dernier ont réalisé
ça


avec la méthode POST en utilisant un paramètre dont la valeur vaut
l'image


GIF encodée en Base64 puis recodée en x-www-form-urlencoded. Ca grossit
la


taille des données mais ça marchait impec...
De mémoire, avec un encoder Base64 du domaine public comme celui dispo à
http://iharder.sourceforge.net/base64/ , ça donnait un truc du genre :



Bonjour Emmanuel,

Ca marche !. En php, il y a la fonction base64_decode qui va bien.
J'avais déja pensé à encoder l'image mais je me demandais s'il n'y avait
pas plus simple.
En tout cas, merci beaucoup pour la solution. Ca me va parfaitement.

Jean-Michel