Pb BufferedInputStream/BufferedOutputStream (pièce jointe avec JavaMail)

urikane Messages postés 16 Date d'inscription lundi 15 décembre 2003 Statut Membre Dernière intervention 24 août 2004 - 23 août 2004 à 14:22
cs_Guillaume1er Messages postés 8 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 3 juin 2006 - 4 mars 2005 à 13:45
Bonjour à tous. Voici mon problème.
Je suis en train de faire une appli qui doit télécharger les pièces jointes dans une boîte mail.
J'utilise l'API JavaMail
Voici le code de la méthode qui enregistre les pièces jointes sur le disque dur:
public boolean savePieceJointe(String rep,Part p)
{
String filename,extension="";
StringTokenizer st;
BufferedInputStream bis;
BufferedOutputStream bos;
InputStream is;
FileOutputStream fos;
File f;
int count,lu,nbtk,taille;
boolean ret=false;

try{
filename=p.getFileName();
st=new StringTokenizer(filename,".");
nbtk=st.countTokens();
for(int m=0;m<nbtk;m++){
extension=st.nextToken();
}
if((extension.equals("zip"))||(extension.equals("csv"))){
System.out.println("nom du fichier: "+filename);
f=new File(rep+"\"+filename);
is=p.getInputStream();
count=0;
taille=filename.length();
while(f.exists()){
count++;
f=new File(rep+"\"+filename.substring(0,taille-4)+"_"+count+filename.substring(taille-4,taille));
}
fos=new FileOutputStream(f);
bos=new BufferedOutputStream(fos);
bis=new BufferedInputStream(is);
try{
while((lu=bis.read())!=-1){
bos.write(lu);
System.out.print(lu);
}
}catch(IOException ioe){throw ioe;}
finally{
bos.flush();
bos.close();
bis.close();
}
}
else{
ret=true;
}
}catch(Exception e){e.printStackTrace();}
return ret;
}

Le seul moyen d'accéder à la pièce jointe est un InputStream (obtenu à partir d'un Part -> cf JavaMail)
Le problème est avec certaine pièce jointe, pas toute (en fait c'est aléatoire :sad) ) j'ai l'exception suivante:

java.io.IOException: Error in encoded stream: needed 4 valid base64 characters but only got 3 before EOF, the valid characters were: "ujB"

Dans le message d'erreur, le nombre de caractère valide n'est pas forcement 3; ça dépend desfois c'est 2 ou 1

J'ai essayé à la place de InputStream d'utiliser un FileInputStream avec les fichiers qui posaient problème (les fichiers étant sur mon déjà sur mon disque dur puisque on ne peut pas obtenir de FileInputStream à partir quand les fichiers sont encore dans la boîte mail).
En fait j'ai juste fait une copie d'un encroit à un autre de mon disque. Mais là ça marche :((((
Donc le pb semble être le InputStream mais je n'ai que ça (enfin j'ai bien regardé la javadoc de l'API JavaMail et Activation mais je n'ai rien trouvé d'autre, peut-être que j'ai mal cherché)

Si quelqu'un à une idée... en plus il faut que j'ai fini ça ce soir :(((
Please help meeeeee :sad)

ps: dsl pour le code je n'arrive pas à l'afficher clairement

21 réponses

cs_Guillaume1er Messages postés 8 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 3 juin 2006
4 mars 2005 à 13:45
sans le
folder.expunge();
0
Rejoignez-nous