[Struts/javamail] Attachments versturen

Pagina: 1
Acties:

  • Diotoir
  • Registratie: Januari 2002
  • Laatst online: 16-08 09:16
Ik ben bezig met het fabrieken van een webmail applicatie mbv jakarta-struts, nu werkt alles op de attachments na. Het probleem is dat ik geen DataSource/DataHandler van de FormFile kan maken. Daarvoor zou ik eerst de file moeten saven op de server maar dat lijkt me zo omslachtig.
Ook "setContent(java.lang.Object o, java.lang.String type) " werkt niet die geeft:
javax.mail.MessagingException: IOException while sending message; nested exception is: javax.activation.UnsupportedDataTypeException: no object DCH for MIME type image/gif
Uitleg hierover kwam ik tegen op de sun site:
For this to work, there must be a JAF DataContentHandler registered for the given "type". If not, you will get the UnsupportedDataTypeException.
Dit zou betekenen dat ik voor elk type file zo'n DataContentHandler moet gaan maken.

Ik heb de search hier/google/apache forum gebruikt maar kan geen oplossing vinden.
Is er iemand die hier wel uit kan komen?

[ Voor 19% gewijzigd door Diotoir op 01-04-2003 19:31 ]


  • momania
  • Registratie: Mei 2000
  • Nu online

momania

iPhone 30! Bam!

Diotoir schreef op 01 april 2003 @ 19:29:
Het probleem is dat ik geen DataSource/DataHandler van de FormFile kan maken. Daarvoor zou ik eerst de file moeten saven op de server maar dat lijkt me zo omslachtig.
Dat is volgens mij wel de enige optie die je hebt.
Dat is toch ook de normale gang van zaken bij webmail, dat je een attachment eerst moet uploaden?
Een DataSource/DataHandler kan je alleen maar maken van elementen uit je Form met hun inhoud. En aangezien de inhoud van een file element extern is, mag je daar om security redenen niet bij denk ik.
Dit zou betekenen dat ik voor elk type file zo'n DataContentHandler moet gaan maken.
Ik denk dat je hiervoor wel 1 DataContentHandler voor kan maken die alle DataFlavours ondersteund ipv 1 DataContentHandler per DataFlavour.

Neem je whisky mee, is het te weinig... *zucht*


  • Diotoir
  • Registratie: Januari 2002
  • Laatst online: 16-08 09:16
Dan ga ik dat maar eens proberen, hoewel ik het wel omslachtig blijf vinden om eerst die file op te slaan om daarna weer in te lezen

  • Diotoir
  • Registratie: Januari 2002
  • Laatst online: 16-08 09:16
Ik heb inmiddels het antwoord gevonden. Ik heb een stukje code voor een ByteArrayDataSource gevonden die ik kan gebruiken. Het is inmiddels getest met een .gif file, andere filetypen ga ik ook nog testen.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.activation.DataSource;


public class ByteArrayDataSource implements DataSource {

   byte[] bytes;
   String contentType;
   String name;

   ByteArrayDataSource(byte[] bytes, String contentType, String name) {
      this.bytes = bytes;
      if(contentType == null)
         this.contentType = "application/octet-stream";
      else
         this.contentType = contentType;
      this.name = name;
   }

   public String getContentType() {
      return contentType;
   }

   public InputStream getInputStream() {
      // remove the final CR/LF
      return new ByteArrayInputStream(
         bytes,0,bytes.length - 2);
   }

   public String getName() {
      return name;
   }

   public OutputStream getOutputStream() throws IOException {
      throw new FileNotFoundException();
   }
}


Deze gebruik ik met de volgende code:
Java:
1
2
3
4
DataSource source = new ByteArrayDataSource(file.getFileData(), null, file.getFileName());
messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(file.getFileName());