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. sql 分组后查询最大所有列信息

    CREATE TABLE students (course varchar(10), stu_name varchar(10), city varchar(10), score int ) inser ...

  2. 错误命令“if not exist "\Dll" mkdir "\Dll" xcopy "\bin\Debug\*.*" "F:\647\VS项目\EtrolMes2014SY\Framework\Dll" /e /i /y”已退出,代码为 9009

    分析错误 第一步:观察错误,发现plugin文件夹中未生成对应的编译文件. 第二步:XCOPY命令无法执行,百度xcopy为何无法执行 第三步,搜索,发现环境变量未配置正确. 就是环境变量path(大 ...

  3. 《从零开始学Swift》学习笔记(Day48)——类型检查与转换

    原创文章,欢迎转载.转载请注明:关东升的博客 继承会发生在子类和父类之间,是一系列类的继承关系. 例如:Person是类层次结构中的根类,Student是Person的直接子类,Worker是Pers ...

  4. SVN中分支的建立与合并

    转载    出处:http://yaozhong1988.blog.163.com/blog/static/141737885201162671635126/ 一.  SVN分支的意义:     简单 ...

  5. 20160924-1——mysql存储引擎

    一.主要存储引擎 5.5以后的版本,默认存储引擎从myisam改成了innodb:线上推荐都用innodb 二.innodb存储引擎 (一)结构 INNODB存储引擎大致分三部分,图中已经(1)(2) ...

  6. C#窗体传值

    整理一下: 1.静态变量传值,非常简单适合简单的非实例的 public calss form1:Form{ public static int A; } public class form2:Form ...

  7. exe4j中"this executable was created with an evaluation version of exe4j"

    在使用exe4j时,如果您的exe4j没有注册,在运行有exe4j转换的*.jar为*.exe的可执行文件是会提示:"this executable was created with an ...

  8. JavaScript数据结构与算法-栈练习

    栈的实现 // 栈类 function Stack () { this.dataStore = []; this.top = 0; // 栈顶位置 相当于length,不是索引. this.push ...

  9. CSS3 Flex布局(项目)

    一.order属性 order属性定义项目的排列顺序.数值越小,排列越靠前,默认为0. 二.flex-grow属性 flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大. ...

  10. 自定义log4j日志级别

    转载自:  http://blog.csdn.net/seven_cm/article/details/26849821 自定义log4j日志级别 参考了网上资料:http://www.360doc. ...