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

Problème: URLConnexion?

2 réponses
Avatar
kenlet
Bonjour, j'ai un petit probl=E8me avec un applet qui envoi un fichier =E0
une servlet. Le fichier est bien envoy=E9 environ 1 fois tous les 15
minutes. Le reste du temps, il y a 6 bytes de diff=E9rent dans l'ent=EAte
du fichier ce qui rend illisible mon fichier wav. Est-ce un probl=E8me
d'URLCOnnexion?

Servlet:
//Recevoir fichier wav
try {
InputStream input =3D request.getInputStream();
//Lire nom du fichier
DataInputStream dis =3D new DataInputStream(input);
File file =3D new File("/var/www/html/phpBB2/audio/" + (String)
dis.readUTF());
FileOutputStream writer =3D new FileOutputStream(file);
//Lire contenu du fichier
int octet;
while((octet =3D dis.read()) !=3D -1)
writer.write(octet);

writer.close();
PrintWriter sortie =3D new
PrintWriter(response.getOutputStream(),true);
sortie.println("OK");
dis.close();
input.close();
sortie.close();

Applet:
// Envoi du fichier wav
try {
URL url =3D new
URL("http://servlet1.bercoqc.com/forum1/servlet/UploadServlet");
URLConnection connexion =3D url.openConnection();
connexion.setDoOutput(true);
OutputStream outputStream =3D
connexion.getOutputStream();
DataOutputStream dos =3D new
DataOutputStream(outputStream);
//Ecrire nom du fichier
dos.writeUTF(m_outputFile.getName());
dos.flush();
//Ecrire contenu
dos.write(FileTool.readBytes(m_outputFile));
dos.flush();

//Effacer fichier sur ordi client
// m_outputFile.delete();

BufferedReader entree =3D new BufferedReader(new
InputStreamReader(connexion.getInputStream()));
retour =3D (String) entree.readLine();
dos.close();
outputStream.close();
entree.close();


Merci de votre aide!

2 réponses

Avatar
TestMan
Bonjour, j'ai un petit problème avec un applet qui envoi un fichier à
une servlet. Le fichier est bien envoyé environ 1 fois tous les 15
minutes. Le reste du temps, il y a 6 bytes de différent dans l'entête
du fichier ce qui rend illisible mon fichier wav. Est-ce un problème
d'URLCOnnexion?

Servlet:
//Recevoir fichier wav
try {
InputStream input = request.getInputStream();
//Lire nom du fichier
DataInputStream dis = new DataInputStream(input);
File file = new File("/var/www/html/phpBB2/audio/" + (String)
dis.readUTF());
FileOutputStream writer = new FileOutputStream(file);
//Lire contenu du fichier
int octet;
while((octet = dis.read()) != -1)
writer.write(octet);

writer.close();
PrintWriter sortie = new
PrintWriter(response.getOutputStream(),true);
sortie.println("OK");
dis.close();
input.close();
sortie.close();

Applet:
// Envoi du fichier wav
try {
URL url = new
URL("http://servlet1.bercoqc.com/forum1/servlet/UploadServlet");
URLConnection connexion = url.openConnection();
connexion.setDoOutput(true);
OutputStream outputStream > connexion.getOutputStream();
DataOutputStream dos = new
DataOutputStream(outputStream);
//Ecrire nom du fichier
dos.writeUTF(m_outputFile.getName());
dos.flush();
//Ecrire contenu
dos.write(FileTool.readBytes(m_outputFile));
dos.flush();

//Effacer fichier sur ordi client
// m_outputFile.delete();

BufferedReader entree = new BufferedReader(new
InputStreamReader(connexion.getInputStream()));
retour = (String) entree.readLine();
dos.close();
outputStream.close();
entree.close();


Merci de votre aide!



Bonjour,

Pas d'idée ... Mettez ethereal sur la ligne pour voir ce qu'il est
envoyé entre serveur et client. Ainsi vous trouverez de quel coté vient
le problème (envoi ou reception). Ensuite passer en mode debogage le
coté qui pose problème et faire du pas à pas pour comprendre d'où vient
le schmillblick précisement !

Sinon, perso, j'aurais plutot fait un POST du binaire du fichier en
passant simplement le nom dans l'URL.
Par exemple, associer la servlet UploadServlet /upload/*
et obtenir ainsi :
http://servlet1.bercoqc.com/forum1/upload/test.wav

Qui permet de simplifier l'envoie du flux et de revenir aux sources.

Attention à :
- l'injection de fichier : on ne doit pas pouvoir donner de nom de
fichier tels que /etc/passwd et autres chemins relatifs ;-)
- la performance de l'écriture du fichier : un BufferedOutpuStream et de
la lecture et écriture en block (style 64k) serait un début interessant ...

A+
TM

Avatar
kenlet
Sinon, perso, j'aurais plutot fait un POST du binaire du fichier en
passant simplement le nom dans l'URL.
Par exemple, associer la servlet UploadServlet /upload/*
et obtenir ainsi :
http://servlet1.bercoqc.com/forum1/upload/test.wav



Peux tu me dire plus exactement comment faire un post du binaire du
fichier en passant le nom dans l URL.

Merci!