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(**); // 单个文件大小限制
upload.setSizeMax(**); // 总文件大小限制
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();
}

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", "");
} });
// 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","");
}
}

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

      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", );//端口号
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", "");//配置发送邮件
trans.sendMessage(message, message.getAllRecipients());
//关闭邮件
trans.close();

      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", );//端口号
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", );//端口号
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", "");//配置发送邮件
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","");
trans.sendMessage(message, message.getAllRecipients());
//关闭邮件trans
trans.close();
}
}

      3.图标+附件

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

  4)需要注意的

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

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

java深入探究10-文件上传组件FileUpload,邮件开发的更多相关文章

  1. 文件上传组件FileUpload 以及邮箱搭建JavaMail

     文件上传与下载 1.1 文件上传 案例: 注册表单/保存商品等相关模块! --à 注册选择头像 / 商品图片 (数据库:存储图片路径 / 图片保存到服务器中指定的目录) 文件上传,要点: 前台: 1 ...

  2. BootStrap fileinput.js文件上传组件实例代码

    1.首先我们下载好fileinput插件引入插件 ? 1 2 3 <span style="font-size:14px;"><link type="t ...

  3. Java 使用 commons-fileupload 实现文件上传工具类

    依赖包 文件上传可以使用 Apache 文件上传组件, commons-fileupload, 它依赖于 commons-io commons-io.jar: https://repo1.maven. ...

  4. .JavaWeb文件上传和FileUpload组件使用

    .JavaWeb文件上传 1.自定义上传 文件上传时的表单设计要符合文件提交的方式: 1.提交方式:post 2.表单中有文件上传的表单项:<input type="file" ...

  5. Atitit..文件上传组件选型and最佳实践总结(2)----断点续传

    Atitit..文件上传组件选型and最佳实践总结(2)----断点续传 1. 断点续传的原理 1 2. 如何判断一个插件/控件是否支持断点续传?? 1 3. 常用的组件选型结果::马 1 4. 自定 ...

  6. Atitit..文件上传组件选择and最佳实践的总结(2)----HTTP

    Atitit..文件上传组件选型and最佳实践总结(2)----断点续传 1. 断点续传的原理 1 2. 怎样推断一个插件/控件是否支持断点续传?? 1 3. 经常使用的组件选型结果::马 1 4.  ...

  7. Baidu WebUploader 前端文件上传组件的使用

    简介 WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流I ...

  8. Bootstrap fileinput.js,最好用的文件上传组件

    本篇介绍如何使用bootstrap fileinput.js(最好用的文件上传组件)来进行图片的展示,上传,包括springMVC后端文件保存. 一.demo   二.插件引入 <link ty ...

  9. Commons FileUpload文件上传组件

    Java实现的文件上传组件有好几种,其中最为“官方”的要数Apache Commons库中的FileUpload了吧. 页面 <form method="POST" enct ...

随机推荐

  1. 免安装mysql配置

    1.下载压缩包:去官网下载免安装的MySQL的压缩包http://dev.mysql.com/downloads/mysql/根据机器选择64位或者32位: 2.解压到相应目录.我解压到了D:\Pro ...

  2. Tomcat设置maxPostSize导致Post请求不过去

    问题:最近部署项目,用到的Tomcat 版本:7.0.82.0,发现一直登陆不了,查询发现原来前端的数据传递不到后端 排查问题:通过debug日志发现,后端没有接受到前端用户的登陆数据,检查发现Tom ...

  3. 解决java.lang.NoClassDefFoundError错误

    昨天在开发过程中,导入同事的一个服务到本地,首先从git上把项目拉下来,然后使用maven导入eclipse,然后build. build的过程中在项目的一个测试类里面报错 java.lang.NoC ...

  4. sql server数据库创建、删除,创建表,数据库的sql语句

    create database test on primary -- 默认就属于primary文件组,可省略(/*--数据文件的具体描述--*/ name='test', -- 主数据文件的逻辑名称 ...

  5. 【BZOJ2707】[SDOI2012]走迷宫 Tarjan+拓扑排序+高斯消元+期望

    [BZOJ2707][SDOI2012]走迷宫 Description Morenan被困在了一个迷宫里.迷宫可以视为N个点M条边的有向图,其中Morenan处于起点S,迷宫的终点设为T.可惜的是,M ...

  6. influxDB选择类函数

    1)TOP()函数 作用:返回一个字段中最大的N个值,字段类型必须是长整型或float64类型. 语法: SELECT TOP(<field_key>[,<tag_keys>] ...

  7. Pythonpika PhpAmqpLib rabbitmq服务中queues被清空的异常处理 无模式数据库对数据结构的定义和控制

    /** * Declares queue, creates if needed * * @param string $queue * @param bool $passive * @param boo ...

  8. Springboot整合thymeleaf模板

    Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用. Thymeleaf的主要目标在于提供一种可被浏览器正确显示的.格式良好的模板创建方式,因此也可以用作静态建 ...

  9. HTML 之 Table 表格详解

    HTML 之 Table 表格详解 HTML中的table可以大致分为三个部分: thead ---------表格的页眉 tbody ---------表格的主体 tfoot ---------定义 ...

  10. python 时间模块小结

    python有两个重要的时间模块,分别是time和datetime time模块 表示时间的几种方法 时间元组 time.struct_time( tm_year=2016, tm_mon=7, tm ...