Envoyer un email avec pièce jointe qui contient byte[] via java mail

J'ai suivantes byte[] qui vient de la base de données.

0x255044462D312E330A25AAABAC

Note: au-dessus de tableau d'octets est l'exemple complet de fichier n'est pas ici à cause de la longueur.

Mise à JOUR:

Mais je suis comme [B@7ffd10fa format


  • Avant de voir le code, veuillez lire ici:

Lorsque j'envoie bytes qui renvoie getPdfByteStream() méthode qu'il envoie dans la pièce jointe d'e-mail comme le fichier d'origine. Mais quand je reçois à partir de la base de données et l'envoyer envoie le fichier corrompu.


Mise à JOUR:

Entity.class

@Lob
@Column(name = "ATTACHED_FILE")
private byte[] attachedFile;

//getter()/setter();

Code qui envoie un email

 try {
        MimeBodyPart textBodyPart = new MimeBodyPart();
        textBodyPart.setText(content);

       //byte[] bytes = getPDFByteStream(); //Returns byte[] reading local drive file


         **UPDATE:**

        //bytes[] bytes=entity.getAttachedFile(); //It gets value from entity.

        /**
        ** It is getting like "[B@7ffd10fa" format but m storing on database like "0x255044462D312E330A25" format
        **/

        String string="0x255044462D312E330A25";
        byte[] bytes =string.getBytes(Charset.forName("UTF-8"));
        System.out.println("bytes " + bytes.toString());

        DataSource dataSource = new ByteArrayDataSource(bytes, "application/pdf");
        MimeBodyPart pdfBodyPart = new MimeBodyPart();
        pdfBodyPart.setDataHandler(new DataHandler(dataSource));
        pdfBodyPart.setFileName("bankAdminReport.pdf");

        MimeMultipart mimeMultipart = new MimeMultipart();
        mimeMultipart.addBodyPart(textBodyPart);
        mimeMultipart.addBodyPart(pdfBodyPart);

        InternetAddress iaSender = new InternetAddress(sender);
        InternetAddress iaRecipient = new InternetAddress(recipient);

        MimeMessage mimeMessage = new MimeMessage(session);
        mimeMessage.setSender(iaSender);
        mimeMessage.setSubject(subject);
        mimeMessage.setRecipient(Message.RecipientType.TO, iaRecipient);
        mimeMessage.setContent(mimeMultipart);

        Transport.send(mimeMessage);
    } catch (Exception ex) {
        ex.printStackTrace();
    }

getPDFByteStream() la méthode

public static byte[] getPDFByteStream() throws IOException {
    File file = new File("C:\\pdf\\bankAdminReport.pdf");

    byte[] b = new byte[(int) file.length()];
    try {
        FileInputStream fileInputStream = new FileInputStream(file);
        fileInputStream.read(b);
    } catch (FileNotFoundException e) {
        System.out.println("File Not Found.");
        e.printStackTrace();
    } catch (IOException e1) {
        System.out.println("Error Reading The File.");
        e1.printStackTrace();
    }
    return b;
}

Quelqu'un peut-il me guider.

Le principal problème est que lorsque j'envoie un fichier de lecture à partir du disque local il envoie à la perfection. mais si j'envoie obtenir à partir de la base de données ou de toute variable locale fichier corrompt.

S'il vous plaît commentaire ci-dessous si vous avez des questions au sujet de la question.
Merci.

chaîne de caractères.getBytes(jeu de caractères.forName("UTF-8")); recherche me trompe - je le tester plus tard
Merci @OkieOth j'ai vu ce stackoverflow.com/questions/18571223/... . Vous pouvez également prendre de référence.
idée stupide, mais ne pas le "0x"-préfixe être supprimé de votre chaîne?
Voulez-vous dire 255044462D312E330A25 au lieu de 0x255044462D312E330A25 ?. @injecteer
Pouvez-vous faire un Arrays.equals(bytesFromDb, bytesFromPdf) juste pour s'assurer que vous obtenez en fait le même tableau d'octets à partir de la base de données et de les PDF? Aussi, l'utilisation Arrays.toString(bytesFromDb) et Arrays.toString(bytesFromPdf) de comparer manuellement.

OriginalL'auteur Yubaraj | 2014-06-03