zoukankan      html  css  js  c++  java
  • java深入探究10-文件上传组件FileUpload,邮件开发

    1.文件上传组件FileUpload

      1)java提供了文件上传的工具包

        需要引入:commons-fileupload-1.2.1.jar(文件上床组件核心包)

             commons-oi-1.4(封装了对文件处理相关工具类)

      2)核心api:

        ServletFileUpload文件核心工具类;

        FileItemFactory->DisFileItemFactory文件上传工厂类

      3)文件上传步骤:

        1.jsp页面:

          这里要注意:form中encType:multipart/form-data:表示的是表单表单上传

                input type="file"满足两个条件就能上传文件了

              三个值:application/x-www-form-urlencoded,multipart/form-data,text/plain

              三个值区别:application/x-www-form-urlencoded  模式方式

                    multipart/form-data          文件模式

                    text/plain                    

        2.Servlet上传类的书写:

          1)创建文件上传核心工具类ServletFileupload->创建FileItemFactory,DisFileItemFactory文件上传工厂-》设置核心类

              setFileSizeMax(30*1024*1024);setFileSizeMax(30*1024*1024);setHeaderEncoding("UTF-8");

          2)判断文件上传类型:isMultiPartContent(request)->

          3)将request的上传的参数变为FileItem类型的List集合,之后针对FileItem做处理

        3.例子:

    // 1. 创建工厂对象
                FileItemFactory factory = new DiskFileItemFactory();
                // 2. 文件上传核心工具类
                ServletFileUpload upload = new ServletFileUpload(factory);
                // 设置大小限制参数
                upload.setFileSizeMax(10*1024*1024);    // 单个文件大小限制
                upload.setSizeMax(50*1024*1024);        // 总文件大小限制
                upload.setHeaderEncoding("UTF-8");        // 对中文文件编码处理
    
                // 判断
                if (upload.isMultipartContent(request)) {
                    // 3. 把请求数据转换为list集合
                    List<FileItem> list = upload.parseRequest(request);
                    // 遍历
                    for (FileItem item : list){
                        // 判断:普通文本数据
                        if (item.isFormField()){
                            // 获取名称
                            String name = item.getFieldName();
                            // 获取值
                            String value = item.getString();
                            System.out.println(value);
                        } 
                        // 文件表单项
                        else {
                            /******** 文件上传 ***********/
                            // a. 获取文件名称
                            String name = item.getName();
                            // ----处理上传文件名重名问题----
                            // a1. 先得到唯一标记
                            String id = UUID.randomUUID().toString();
                            // a2. 拼接文件名
                            name = id + "#" + name;                        
                            
                            // b. 得到上传目录
                            String basePath = getServletContext().getRealPath("/upload");
                            // c. 创建要上传的文件对象
                            File file = new File(basePath,name);
                            // d. 上传
                            item.write(file);
                            //item.delete();  // 删除组件运行时产生的临时文件
                            System.out.println("文件上传成功");
                            System.out.println(basePath);
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    View Code

    2.邮件开发

      1)环境配置

        在我们自己电脑上配置邮件服务端(易服务邮器eyoumailserversetup.exe)客户端(foxmail)

        服务端配置:1.新建域名:工具-》服务器配置-》单域名款中输入xiaoping.com(自己随意取);

              2.添加2个用户自己用来测试zhangsan,lisi

          

        客户端配置:登录2个用户

    接受服务器:localhost:110;发送服务器:localhost:25这里我们是在自己本地测试所以地址是本机地址

      2)邮件开发需要的jar

          mail.jar(核心api);activation.jar(jdk6.0之后就不需要了)

      3)三种邮件体发送

    一般的邮件开发工具包

    package shop.utils;
    
    import java.util.Properties;
    
    import javax.mail.Authenticator;
    import javax.mail.Message;
    import javax.mail.Message.RecipientType;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.AddressException;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    
    /**
     * 邮件发送工具类
     * @author 传智.郭嘉
     *
     */
    public class MailUitls {
        /**
         * 发送邮件的方法
         * @param to    :收件人
         * @param code    :激活码
         */
        public static void sendMail(String to,String code){
            /**
             * 1.获得一个Session对象.
             * 2.创建一个代表邮件的对象Message.
             * 3.发送邮件Transport
             */
            // 1.获得连接对象
            Properties props = new Properties();
            props.setProperty("mail.host", "localhost");
            Session session = Session.getInstance(props, new Authenticator() {
    
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("service@xiaoping.com", "123");
                }
                
            });
            // 2.创建邮件对象:
            Message message = new MimeMessage(session);
            // 设置发件人:
            try {
                message.setFrom(new InternetAddress("service@xiaoping.com"));
                // 设置收件人:
                message.addRecipient(RecipientType.TO, new InternetAddress(to));
                // 抄送 CC   密送BCC
                // 设置标题
                message.setSubject("来自购物天堂官方激活邮件");
                // 设置邮件正文:
                message.setContent("<h1>购物天堂官方激活邮件!点下面链接完成激活操作!</h1><h3><a href='http://192.168.36.103:8080/shop/user_active.action?code="+code+"'>http://localhost:8080/shop/user_active.action?code="+code+"</a></h3>", "text/html;charset=UTF-8");
                // 3.发送邮件:
                Transport.send(message);
            } catch (AddressException e) {
                e.printStackTrace();
            } catch (MessagingException e) {
                e.printStackTrace();
            }
            
        }
        
        public static void main(String[] args) {
            sendMail("aaa@xiaoping.com","11111111111111");
        }
    }
    View Code

          普通文本发送,文本加图片,图片加附件

          1.普通文本发送:

            配置Session.getDefaultInstance(pro)邮件参数(

              mail.transport.protocol;

              mail.smtp.host;

              mail.smtp.port;

              mail.smtp.auth;

              mail.debug"

            )-》创建邮件体-》配置邮件体参数-》发送邮件体-》关闭邮件

    //1.设置邮件的参数
            Properties prop=new Properties();
            prop.put("mail.transport.protocol", "smtp");//邮件发送协议
            prop.put("mail.smtp.host", "localhost");//主机ip
            prop.put("mail.smtp.port", 25);//端口号
            prop.put("mail.smtp.auth", "true");//用户名密码验证
            prop.put("mail.debug", "false");//调试模式
            //2创建邮件体对象
            Session session=Session.getDefaultInstance(prop);
            MimeMessage message=new MimeMessage(session);
            //3配置邮件体参数
            message.setSubject("我的第一封邮件    ");        //主题
            message.setSentDate(new Date());        //时间
            message.setSender(new InternetAddress("zhangsan@xiaoping.com"));//发送人
            message.setRecipient(RecipientType.TO, new InternetAddress("lisi@xiaoping.com"));//接收人
            message.setContent("<a href='www.baidu.com'>百度</a>", "text/html;charset=UTF-8");//发送信息正文
            message.saveChanges();        //可选,保存邮件体
            //4.发送邮件
            Transport trans=session.getTransport();
            trans.connect("zhangsan@xiaoping.com", "123");//配置发送邮件
            trans.sendMessage(message, message.getAllRecipients());
            //关闭邮件
            trans.close();
    View Code

          2.图片+文本:创建的邮件块是relate

            与创建文本一样只有:邮件体内容setContent()我们用的是多功能用户邮件(relate)

             创建多功能邮件体:MimeMultpart relate=new MimeMultpart("related");

             之后创建多功能邮件体子部分::MimepBodyPart part1=new MimeBodyPart()//用来存放文本

                            MimeBodyPart part2=new MimiBodyPart()//用来存放图片

              part2添加图片:part2.setDataHandler();来添加图片,这里需要的参数DataHandler handler=new DataHandler()

            

    public class SendMail {
        private static Properties prop;
        //发件人
        private static InternetAddress sendMan=null;
        static{
            Properties prop=new Properties();
            prop.put("mail.transport.protocol", "smtp");//邮件发送协议
            prop.put("mail.smtp.host", "localhost");//主机ip
            prop.put("mail.smtp.port", 25);//端口号
            prop.put("mail.smtp.auth", "true");//用户名密码验证
            prop.put("mail.debug", "false");//调试模式
            try{
                sendMan=new InternetAddress("zhangsan@xiaoping.com");
            }catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
        /**
         * 发送一个文本普通邮件
         * @throws Exception 
         */
        @Test
        public void sendTextMail() throws Exception{
            //1.设置邮件的参数
            Properties prop=new Properties();
            prop.put("mail.transport.protocol", "smtp");//邮件发送协议
            prop.put("mail.smtp.host", "localhost");//主机ip
            prop.put("mail.smtp.port", 25);//端口号
            prop.put("mail.smtp.auth", "true");//用户名密码验证
            prop.put("mail.debug", "false");//调试模式
            //2创建邮件体对象
            Session session=Session.getDefaultInstance(prop);
            MimeMessage message=new MimeMessage(session);
            //3配置邮件体参数
            message.setSubject("我的第一封邮件    ");        //主题
            message.setSentDate(new Date());        //时间
            message.setSender(new InternetAddress("zhangsan@xiaoping.com"));//发送人
            message.setRecipient(RecipientType.TO, new InternetAddress("lisi@xiaoping.com"));//接收人
            message.setContent("<a href='www.baidu.com'>百度</a>", "text/html;charset=UTF-8");//发送信息正文
            message.saveChanges();        //可选,保存邮件体
            //4.发送邮件
            Transport trans=session.getTransport();
            trans.connect("zhangsan@xiaoping.com", "123");//配置发送邮件
            trans.sendMessage(message, message.getAllRecipients());
            //关闭邮件
            trans.close();
        }
        /**
         * 发送图片邮件
         * @throws Exception 
         */
        @Test
        public void sendImgMail() throws Exception{
            //1创建邮件体
            Session session=Session.getDefaultInstance(prop);
            MimeMessage message=new MimeMessage(session);
            //2设置邮件体参数
            message.setSubject("带图片邮件");
            message.setSender(sendMan);
            message.setRecipient(RecipientType.TO, new InternetAddress("lisi@xiaoping.com"));
            message.setSentDate(new Date());
            /*******************设置邮件内容:多功能用户邮件(related)**********************/
            //2.1发送的邮件体内容:内容是多功能用户邮件有多个部分组成
            MimeMultipart relate=new MimeMultipart("related");
            MimeBodyPart content=new MimeBodyPart();//多功能邮件的两个字部分文本部分
            MimeBodyPart resoure=new MimeBodyPart();//图片部分
            //2.1.1左侧文本设置
            relate.addBodyPart(content);
            relate.addBodyPart(resoure);//将字部分加上去
            content.setContent("<img src='cid:8.jpg'/>  好哈哈!", "text/html;charset=UTF-8");
            //2.1。1右侧图片配置
            String path=SendMail.class.getResource("8.jpg").getPath();
            DataSource ds=new FileDataSource(new File(path));
            DataHandler handler=new DataHandler(ds);
            resoure.setDataHandler(handler);
            //2.2配置的多功能用户邮件加入其中
            message.setContent(relate);
            //发送邮件
            Transport trans=session.getTransport();
            trans.connect("zhangsan","123");
            trans.sendMessage(message, message.getAllRecipients());
            //关闭邮件trans
            trans.close();
        }
    }
    View Code

          3.图标+附件

            创建的邮件块是mixed->这个有两部分part->左边存放图片文字(存放文字图片需要再创建一个邮件快related;MimeMultpart(relate)->右侧存放附件part2.setHandler(FileDataSource)->最后发送邮件块

      4)需要注意的

          如果是web项目,因为javaee自带的有邮件功能,可能存在问题!

          我们要用自己的mail.jar文件功能!  需要删除javaeemail!

  • 相关阅读:
    处理缺失值
    数据清理
    数据聚合
    ajax动态生成table
    MangeEmpHashMap
    Arraylist的雇员管理操作
    jsp获取一个对象和list对象
    Controller比较两个对象discs、outlets中的元素是否相等。相同则相应的checkbox为checked
    限制input text输入的类型(数字,字母,小数点)
    联合主键的映射运用
  • 原文地址:https://www.cnblogs.com/xiaoping1993/p/6872119.html
Copyright © 2011-2022 走看看