Simuler un POST pour uploader un fichier

gorbadoc_51 Messages postés 13 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 15 mars 2006 - 1 juil. 2005 à 11:45
gorbadoc_51 Messages postés 13 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 15 mars 2006 - 21 juil. 2005 à 15:35
Bonjours,



Mon probleme et le suivant:



J'ai un script php qui permet de mettre à jour des fichiers sur le
serveur à partir d'un formulaire. Je voudrai ne plus avoir ce
formulaire, mais une applet java.

Pour ca, il faut que j'envoie le fichier par la methode POST. je sais
qu'on peut le faire avec une HttpURLConnection, mais je ne sais pas
comment...



Si j'envoye juste le fichier, ca n'a pas l'air de marcher.

Comment reproduire le zone du formulaire tel que le nom du fichier par exemple, celui qui est lu dans <tt>$_FILES['userfile']['name'] .</tt>



Pour l'instant j'arrive seulement à lire les reponses de mon script PHP...



Merci d'avance...

8 réponses

gorbadoc_51 Messages postés 13 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 15 mars 2006
1 juil. 2005 à 12:02
Bon j'avance dans mes recherches,

Je ne doit pas envoyer mon fichier brute. Je doit d'abord envoyer un entete HTTP.
Mais laquelle? et comment? et je l'envoye quand le fichier alors?

Que de question sans reponse.

Personne n'a une idée?
0
safisoft Messages postés 489 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 13 mai 2009 6
1 juil. 2005 à 15:02
ton pbm est po clair!!
0
safisoft Messages postés 489 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 13 mai 2009 6
1 juil. 2005 à 15:02
ton pbm est po clair!!
0
safisoft Messages postés 489 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 13 mai 2009 6
1 juil. 2005 à 15:02
ton pbm est po clair!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gorbadoc_51 Messages postés 13 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 15 mars 2006
1 juil. 2005 à 18:31
Bon je reprend differemment alors...

Avec un formulaire, on peut uploader un fichier sur un serveur qui est alors mis dans le repertoire temporaire. Avec un script php, on peut alors le recuperer et le copier au bon endroit. Pour cela on se sert de la variable $_FILES qui contient toutes les informations utiles.

Donc je voudrais faire un client java qui communique avec ce module php sans avoir a modifier ce dernier. Donc envoyer les meme requetes et lire les reponses.

Mais je ne sais pas ce que recoit exactement le serveur HTML/PHP... Si je le savais, je pourais lui envoyer la meme chose avec un URLConnection (enfin je crois).

Voila, j'espere que c'est un peu plus clair....
0
gorbadoc_51 Messages postés 13 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 15 mars 2006
3 juil. 2005 à 21:01
personne n'a une idee alors??? ou personne ne lit ce post?

Ou alors on ne peut pas le faire, mais je pense qu'on peut le faire...
0
cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
20 juil. 2005 à 16:43
Moi j'ai dévellopé un serveur qui fait ça mais je n'utilise pas la classe HttpURLConnection, et c'es tun peu du bidouillage.
En fait j'ai carrément je lis la socket avec InputStream, quand je détecte le début du fichier je le sauvegarde dans un tampon jusqu'à détecter le boundary, il reste plus qu'à sauvegarder le tampon dans le fichier.
Voilà un bout du code (pour comprendre ce renseigner sur le protocole http):

[...]
public String litligne(InputStream is) {
str = "";
while (true) {
try {
bytelu = is.read();
}
catch (Exception erreur) {
return null;
}
if (bytelu == -1) return null;
caraclu = (char) bytelu;
if (String.valueOf(caraclu).equals("\r")) {
try {
is.read();
}
catch (Exception erreur) { }
break;
}
str = str+caraclu;
}
return str;
}
[..]
while ((str = litligne(inputstream)) != null) {
if (str "" && recupost 0) break;
if (str.startsWith("GET") && (posfin = str.indexOf(" HTTP/")) != -1) cible = (str.substring(4, posfin)).toLowerCase();
else if (str.startsWith("POST") && (posfin = str.indexOf(" HTTP/")) != -1) cible = (str.substring(5, posfin)).toLowerCase();
else if (str.startsWith("Content-Type: multipart/form-data; boundary=")) {
boundary = str.substring(44);
recupost = 2;
}
else if (recupost 2 && str.equals("--"+boundary)) recupost 1;
else if (recupost 1 && str.startsWith("Content-Disposition: form-data;") && (posdbt str.indexOf("filename="")) != -1) {
tabcar = str.toCharArray();
for (int i = posdbt+10; !String.valueOf(tabcar[i]).equals("""); i++) {
if (tabcar[i] == 92) filename = "";
else filename = filename+tabcar[i];
}
}
else if (recupost == 1 && str.equals("")) {
wtbfichier = new ByteArrayOutputStream();
ByteArrayOutputStream wtampon;
ByteArrayInputStream rtampon;
byte[] bbytes = ("--"+boundary+"--").getBytes();
int pos, boundlong = bbytes.length;
while (true) {
pos = 0;
wtampon = new ByteArrayOutputStream();
while (pos<boundlong) {
try {
bytelu = inputstream.read();
}
catch (Exception erreur) {
pos = boundlong;
break;
}
if (bytelu == -1) {
pos = boundlong;
break;
}
wtampon.write(bytelu);
if (bytelu != bbytes[pos]) break;
pos++;
}
if (pos == boundlong) break;
rtampon = new ByteArrayInputStream(wtampon.toByteArray());
while((bytelu = rtampon.read()) != -1) {
wtbfichier.write(bytelu);
}
}
wtampon = null;
rtampon = null;
break;
}
}
[...]
0
gorbadoc_51 Messages postés 13 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 15 mars 2006
21 juil. 2005 à 15:35
Merci, mais g avancé depuis.... ;) De toute facon meme si ca ne me sert pas, ca servira a qqu'un d'autre.

D'ailleur pour info, lorsqu'on envoie un fichier en faissant un post avec la classe HTTPConnection, il le stock en memoire avant de l'envoyer. Du coup si le fichier et vraiment gros (100Mo?) ca passe pas.

G pas trouvé comment resoudre ce probleme. Sauf en utilisant une grosse api qui fait tout tres bien... g nommé http://jakarta.apache.org/commons/httpclient/

Si g le temps, faudra que j'essaye ta methode. C vrai qu'en passant par les socket c'est possible qu'il ne bufferise pas le fichier...
0
Rejoignez-nous