Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1800 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Recreer une pièce jointe avec JavaMail

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Recreer une pièce jointe avec JavaMail

n°1379517
psychotek
Posté le 02-06-2006 à 09:55:12  profilanswer
 

Bonjour all,
 
Je cherche à envoyer une pièce jointe à un webservice, grâce à un DataHandler. Pas de problème pour la partie cliente, qui ressemble à ça :
 

Code :
  1. public class WebServiceJavaTestor {
  2.   public static void main(String[] args) {
  3.     WebServiceJavaProxy p = new WebServiceJavaProxy();
  4.     try {
  5.       String filename = "image.jpg";
  6.       DataSource ds = new FileDataSource("C:\\temp\\source\\" + filename);
  7.       DataHandler dh = new DataHandler(ds);
  8.       System.out.println("Call to storeFile : " + p.storeFile(filename, dh));
  9.     } catch (RemoteException e) {
  10.       e.printStackTrace();
  11.     }
  12.   }
  13. }


 
Par contre la partie serveur doit fonctionner sur un serveur Domino 6.5, ce qui inclue un certain nombre de difficultés :
- java 1.3
- il faut tout parser à la main.
 
C'est donc ce que je fais. La requête que je reçoit ressemble à ça :
 

Citation :

------=_Part_0_14158819.1148988787982
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-Id: <B16DC35C0EB5DB244E8FB115971AAB01>
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlnssd="http://www.w3.org/2001/XMLSchema" xmlnssi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<storeFile xmlns="http://webservicejava">
<filename>image.jpg</filename>
<dh href="cid:E790332A5CC67910DE669D376D0DBF23" xsi:type="ns1ataHandler" xmlns:ns1="http://xml.apache.org/xml-soap"/>
</storeFile>
</soapenv:Body>
</soapenv:Envelope>
------=_Part_0_14158819.1148988787982
Content-Type:image/jpeg
Content-Transfer-Encoding: binary
Content-Id: <E790332A5CC67910DE669D376D0DBF23>
Ï ÓJIF??? ?C?????? ???????????? $.\' \",#??(7),01444?
...
...
...
------=_Part_0_1


 
Bon j'arrive bien à séparer les deux parties et à parser la première pour récupérer le nom du fichier et le content ID, ce qui me permet d'aller récupérer le contenu à proprement parler dans la seconde partie.
 
Seulement mes essais pour recréer un DataHandler à partir du contenu ne fonctionnent que sur du texte, et pas sur des images ! Les images ainsi reçues (ou autre type de contenu un peu fun) ne sont pas exploitables.
 
Je vous mets quelques exemples de mes tentatives :
 
 

Code :
  1. String content = source.substring(begin, end).trim();
  2. // create the data handler from the content and the mime type  
  3. DataSource dataSource = new ByteArrayDataSource(content, contentType);
  4. DataHandler dh = new DataHandler(dataSource);
  5. FileOutputStream fos = new FileOutputStream("C:\\temp\\image.jpg" );
  6. dh.writeTo(fos);
  7. fos.close();


 
ou encore :
 

Code :
  1. // get a Session object  
  2. Session session = Session.getInstance(new Properties(), null);
  3. // create a mime message for the attachment part  
  4. byte[] sourceBytes = source.getBytes(); // todo : get the good charset  
  5. ByteArrayInputStream inputStream = new ByteArrayInputStream(sourceBytes);
  6. MimeMessage msg = new MimeMessage(session, inputStream);
  7. FileOutputStream out = new FileOutputStream("C:\\temp\\image.jpg" );
  8. msg.getDataHandler().writeTo(out);
  9. out.close();


 
Bref, tout ça ne marche pas, malheuresement, et je suis bien en galère. Vous pourriez m'aider SVP ?
 
Merci

mood
Publicité
Posté le 02-06-2006 à 09:55:12  profilanswer
 

n°1381099
psychotek
Posté le 05-06-2006 à 09:01:59  profilanswer
 

Bon il marche pas trop mon topic. J'ai découvert que ce qui ne va pas, c'est la réception de la requête par le serveur Domino : il remplace tous les caractères spéciaux par des points d'exclamation. Impossible de recréer une pièce jointe avec ça...

n°1384574
psychotek
Posté le 09-06-2006 à 14:58:24  profilanswer
 

Pour les gens qui seraient coincés comme moi dans cette situation, je leur conseille de changer d'approche : utiliser une servlet, exécutée par le moteur de servlet de Domino (attention, c'est pas du dernier cri). L'objet HttpServletResponse, passé en paramètre de doGet (ou doPost), permet de récupérer le contenu du message sans modification de l'encodage (sous forme de Stream du moins).

n°1384628
wapcamer
Posté le 09-06-2006 à 15:35:00  profilanswer
 

Hey, juste un truc, ta pièce jointe tu dois l'encoder en base64 et pas en binaire, pq c'est clair que les caractères spéciaux ne passsent pas sur le réseau...


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
n°1392839
psychotek
Posté le 22-06-2006 à 14:46:08  profilanswer
 

Merci pour l'info m'sieur, désolé j'avais pas vu ta réponse. Pour le coup j'ai tout fait avec SAAJ (SOAP with Attachment API for Java), qui évite de parser à la main.
De manière générale, il faut effectivement encoder en base64 et manipuler des flux pour éviter les emmerdes sur des string.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Recreer une pièce jointe avec JavaMail

 

Sujets relatifs
Problème pour envoyer un mail (JavaMail)envoi de messages automatiques + pièce jointe vers Outlook par Access
Envoi de mel + pièce jointe bloqué !!!Recuperer une piece jointe avec javamail
Génération d'un mail avec pièce jointe en PHP 
Plus de sujets relatifs à : Recreer une pièce jointe avec JavaMail


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR