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

Problème: bytes manquant lors de transfert applet/servlet

2 réponses
Avatar
kennylettre
Bonjour, le but de mon code est de transf=E9rer un fichier(d'un applet
vers servlet). En premier, je passe le nom et ensuite le contenu du
fichier =E0 la m=E9thode doPost(). Tout fonctionne, le seul probl=E8me
c'est qu'il manque 1 ligne de bytes dans le contenu du fichier. =C0
prendre note que lorsque le nom est hardcoder, tout le contenu est
transf=E9r=E9 correctement. Merci de votre aide. Voici mon code:

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();
//Ecrire nom du fichier
PrintWriter sortie =3D new PrintWriter(outputStream);
sortie.println(m_outputFile.getName());
sortie.flush();
//Ecrire contenu
outputStream.write(FileTool.readBytes(m_outputFile));
outputStream.flush();

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

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

writer.close();
PrintWriter sortie =3D new PrintWriter(response.getOutputStream(),true);
sortie.println("Votre enregistrement a ete correctement envoye");

2 réponses

Avatar
Insitu
writes:

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


Trés mauvaise idée de mélanger des I/O en mode octet et en mode
caractére, surtout quand on utilise des buffers. Utilisez plutôt un
encodage binaire d'une chaîne de caractère (writeUTF ou writeStringn
ou writeObject).

HTH,

insitu.

Avatar
kenlet

Trés mauvaise idée de mélanger des I/O en mode octet et en mode
caractére, surtout quand on utilise des buffers. Utilisez plutôt un
encodage binaire d'une chaîne de caractère (writeUTF ou writeStringn
ou writeObject).

HTH,

insitu.





Merci beaucoup! J'ai remplacé le tout par des Data***Stream et tout
fonctionne à merveille!
Je ne mélangerai plus à l'avenir!