Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Apache文件上载启用附件_Java_Jsp_Servlets_File Upload_Jakarta Mail - Fatal编程技术网

Java 如何使用Apache文件上载启用附件

Java 如何使用Apache文件上载启用附件,java,jsp,servlets,file-upload,jakarta-mail,Java,Jsp,Servlets,File Upload,Jakarta Mail,我正在使用ApacheCommonsFileUpload API将文件从JSP存储到临时目录中的servlet,但我不知道下一步该如何使用javamail API将电子邮件作为附件发送 如何使用ApacheFileUpload API检索临时目录中写入的文件,并将其作为附件发送到邮件服务器。将这些文件写入内存或磁盘将如何帮助我?以下是一个示例: private static void notify(String subject, String text, File attachm

我正在使用ApacheCommonsFileUpload API将文件从JSP存储到临时目录中的servlet,但我不知道下一步该如何使用javamail API将电子邮件作为附件发送

如何使用ApacheFileUpload API检索临时目录中写入的文件,并将其作为附件发送到邮件服务器。将这些文件写入内存或磁盘将如何帮助我?

以下是一个示例:

private static void notify(String subject, String text,
        File attachment, String from, String to) throws Exception {
    Context context = new InitialContext();
    Session sess = (Session)context.lookup("java:comp/env/mail/session");
    MimeMessage message = new MimeMessage(sess);
    message.setSubject(subject, "UTF-8");
    if (attachment == null) {
        message.setText(text, "UTF-8");
    } else {
        MimeMultipart mp = null;
        MimeBodyPart part1 = new MimeBodyPart();
        part1.setText(text, "UTF-8");
        MimeBodyPart part2 = new MimeBodyPart();
        part2.setDataHandler(new DataHandler(new FileDataSource(attachement)));
        part2.setFileName(file.getName());
        mp = new MimeMultipart();
        mp.addBodyPart(part1);
        mp.addBodyPart(part2);
        message.setContent(mp);
   }

    message.setFrom(new InternetAddress(from));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
    Transport.send(message);
}
在本例中,使用了FileDataSource,这意味着附件必须首先保存为文件。 我有时会用自制的MemoryDataSource来代替。代码如下:

package com.lagalerie.mail;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import javax.activation.DataSource;

public class MemoryDataSource implements DataSource {
    private String name;
    private String contentType;
    private byte content[] = {};

    public MemoryDataSource(String name, String contentType) {
        this.name = name;
        this.contentType = contentType;
    }

    public String getContentType() {
        return contentType;
    }

    public InputStream getInputStream() {
        return new ByteArrayInputStream(content);
    }

    public String getName() {
        return name;
    }

    public OutputStream getOutputStream() {
        return new ByteArrayOutputStream() {
            @Override
            public void close() {
                content = toByteArray();
            }
        };
    }
}
以下是一个例子:

private static void notify(String subject, String text,
        File attachment, String from, String to) throws Exception {
    Context context = new InitialContext();
    Session sess = (Session)context.lookup("java:comp/env/mail/session");
    MimeMessage message = new MimeMessage(sess);
    message.setSubject(subject, "UTF-8");
    if (attachment == null) {
        message.setText(text, "UTF-8");
    } else {
        MimeMultipart mp = null;
        MimeBodyPart part1 = new MimeBodyPart();
        part1.setText(text, "UTF-8");
        MimeBodyPart part2 = new MimeBodyPart();
        part2.setDataHandler(new DataHandler(new FileDataSource(attachement)));
        part2.setFileName(file.getName());
        mp = new MimeMultipart();
        mp.addBodyPart(part1);
        mp.addBodyPart(part2);
        message.setContent(mp);
   }

    message.setFrom(new InternetAddress(from));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
    Transport.send(message);
}
在本例中,使用了FileDataSource,这意味着附件必须首先保存为文件。 我有时会用自制的MemoryDataSource来代替。代码如下:

package com.lagalerie.mail;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import javax.activation.DataSource;

public class MemoryDataSource implements DataSource {
    private String name;
    private String contentType;
    private byte content[] = {};

    public MemoryDataSource(String name, String contentType) {
        this.name = name;
        this.contentType = contentType;
    }

    public String getContentType() {
        return contentType;
    }

    public InputStream getInputStream() {
        return new ByteArrayInputStream(content);
    }

    public String getName() {
        return name;
    }

    public OutputStream getOutputStream() {
        return new ByteArrayOutputStream() {
            @Override
            public void close() {
                content = toByteArray();
            }
        };
    }
}