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(**); // 单个文件大小限制
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,邮件开发的更多相关文章
- 文件上传组件FileUpload 以及邮箱搭建JavaMail
文件上传与下载 1.1 文件上传 案例: 注册表单/保存商品等相关模块! --à 注册选择头像 / 商品图片 (数据库:存储图片路径 / 图片保存到服务器中指定的目录) 文件上传,要点: 前台: 1 ...
- BootStrap fileinput.js文件上传组件实例代码
1.首先我们下载好fileinput插件引入插件 ? 1 2 3 <span style="font-size:14px;"><link type="t ...
- Java 使用 commons-fileupload 实现文件上传工具类
依赖包 文件上传可以使用 Apache 文件上传组件, commons-fileupload, 它依赖于 commons-io commons-io.jar: https://repo1.maven. ...
- .JavaWeb文件上传和FileUpload组件使用
.JavaWeb文件上传 1.自定义上传 文件上传时的表单设计要符合文件提交的方式: 1.提交方式:post 2.表单中有文件上传的表单项:<input type="file" ...
- Atitit..文件上传组件选型and最佳实践总结(2)----断点续传
Atitit..文件上传组件选型and最佳实践总结(2)----断点续传 1. 断点续传的原理 1 2. 如何判断一个插件/控件是否支持断点续传?? 1 3. 常用的组件选型结果::马 1 4. 自定 ...
- Atitit..文件上传组件选择and最佳实践的总结(2)----HTTP
Atitit..文件上传组件选型and最佳实践总结(2)----断点续传 1. 断点续传的原理 1 2. 怎样推断一个插件/控件是否支持断点续传?? 1 3. 经常使用的组件选型结果::马 1 4. ...
- Baidu WebUploader 前端文件上传组件的使用
简介 WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流I ...
- Bootstrap fileinput.js,最好用的文件上传组件
本篇介绍如何使用bootstrap fileinput.js(最好用的文件上传组件)来进行图片的展示,上传,包括springMVC后端文件保存. 一.demo 二.插件引入 <link ty ...
- Commons FileUpload文件上传组件
Java实现的文件上传组件有好几种,其中最为“官方”的要数Apache Commons库中的FileUpload了吧. 页面 <form method="POST" enct ...
随机推荐
- veridata实验举例(4)验证veridata查找出updata、delete操作导致的不同步现象
veridata实验举例(4)验证veridata查找出updata.delete操作导致的不同步现象 续接:<veridata实验举例(3)验证veridata查找出insert操作导致的不同 ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)3.4——Flavor Dimensions
问题: 一个product flavor不够,你需要另一个标准去区分不同版本的app 解决方案: 在product flavor中增加flavorDimensions 讨论: 在3.2章展示了一个有三 ...
- 【BZOJ1863】[Zjoi2006]trouble 皇帝的烦恼 二分+DP
[BZOJ1863][Zjoi2006]trouble 皇帝的烦恼 Description 经过多年的杀戮,秦皇终于统一了中国.为了抵御外来的侵略,他准备在国土边境安置n名将军.不幸的是这n名将军羽翼 ...
- 【BZOJ4247】挂饰 背包
[BZOJ4247]挂饰 Description JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同——其中的一些挂饰附有可以挂其他 ...
- SharePoint让所有用户访问站点
SharePoint让所有用户访问站点,可用在用户组里面添加:NT AUTHORITY\authenticated users
- 《从零开始学Swift》学习笔记(Day 50)——扩展计算属性、方法
原创文章,欢迎转载.转载请注明:关东升的博客 可以在原始类型上扩展计算属性,包括实例计算属性和静态计算属性.添加计算属性的定义,与普通的计算属性的定义是一样的. 实例计算属性示例:在网络编程时,为了减 ...
- redis add 'vm.overcommit_memory = 1' to /etc/sysctl.conf
w root@well:/etc# vim sysctl.conf #kernel.domainname = example.com # # /etc/sysctl.conf - Configurat ...
- Testlink安装访问提示“应用程序DEFAULT WEB SITE”中的服务器错误
错误摘要:HTTP错误403.14 - ForbiddenWeb服务器被配置为不列出此目录的内容.
- Model的save方法的使用
在使用类方法创建对象的时候发生save()总提示缺少self参数的错误: class BookInfo(models.Model): #创建书本信息类,继承models.Model booktitle ...
- 稀疏表示(Sparse Representations)
1.什么是稀疏表示: 用较少的基本信号的线性组合来表达大部分或者全部的原始信号. 其中,这些基本信号被称作原子,是从过完备字典中选出来的:而过完备字典则是由个数超过信号维数的原子聚集而来的.可见,任一 ...