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 ...
随机推荐
- C#安装,启动,停止,卸载Windows服务
public class OptionServices { //安装服务 public static void InstallService(string filep ...
- 【BZOJ4444】[Scoi2015]国旗计划 双指针+倍增
[BZOJ4444][Scoi2015]国旗计划 Description A国正在开展一项伟大的计划——国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形 ...
- 第六课作业——主从复制和sentinel高可用
第六课时作业 静哥 by 2016.3.21~2016.4.3 [作业描述] 1.配置主从复制,截图看日志 2.配置一个哨兵,一主一从结构,并实现主宕机从接管的过程,截图显示 3.总结哨兵的原理 ...
- iOS蓝牙接收外设数据自动中断
一.错误原因 在做iOS设备作为central,与蓝牙外设连接,接收蓝牙外设传输的数据时发生蓝牙中断. 在- (void)centralManager:(CBCentralManager *)cent ...
- Ajax 处理json的方法不同
json字符串从从后台传递到前台的方法有两种 1.使用context.Response(); 2.使用webmethod 方法调用静态函数 返回的字符串 前者返回的json是obj类型,而后者返回的是 ...
- 使用GUID作为数据表主键的好处(转)
http://blog.itpub.net/3875/viewspace-789520/ 分类: 数据库开发技术 使用GUID作为数据表主键的好处 [@more@] 使用GUID作为数据表主键的好处 ...
- Python Selenium 自动化测试
本文转载 作者:灰蓝蓝蓝蓝蓝蓝链接:http://www.jianshu.com/p/5188cb3ab790來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.更多技术博客 ...
- Android怎样在http头信息里设置參数
在使用http请求server时经常要传递一些參数给server.如IMEI号.平台号.渠道号.client的版本等一些通用信息,像这些參数我们没有必要每次都拼在url后,我们能够统一加入到http头 ...
- 算法题 19 二叉平衡树检查 牛客网 CC150
算法题 19 二叉平衡树检查 牛客网 CC150 实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1. 给定指向树根结点的指针TreeNode* ro ...
- Tips for Unix/Linux
@1: 在单个命令中创建目录树:不要逐层创建目录,尽量使用mkdir的-p选项: ~$ mkdir -p one/two/three # 假设目录one不存在 创建复杂的目录树: ~$ mkdir - ...