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 ...
随机推荐
- 怎样在Mac OS X上面指定Eclipse启动时用指定的某一版本号JDK?
编辑 $ECLIPSE_HOME/Eclipse.app/Contents/MacOS/eclipse.ini 文件.在 Finder 中右键或者Ctrl+点击 Eclipse 应用程序.然后点击&q ...
- 巨蟒python全栈开发flask1
1.整体把握 (1)路飞学城 - RestAPI 前后端分离开发 Django Vue.js - DRF DjangoRestFromwork - 线上商城的经验 (2)智能玩具 - RestAPI ...
- 费马小定理 Fermat Theory
w 整数的质数次方和自身的差是是质数的倍数 费马小定理(Fermat Theory)是数论中的一个重要定理,其内容为: 假如p是质数,且Gcd(a,p)=1,那么 a(p-1)≡1(mod p).即: ...
- Qt 如何获取一个文件的 Icon 图标?
#include <QPixmap> #include <QString> #include <QFileInfo> #include <QFileIconP ...
- C#窗口的Load事件与Shown事件的差别
Load:在第一次显示窗口前发生. <pre name="code" class="csharp"> private void Form1_Load ...
- boost之字符串与文本处理
C++标准库中字符串转数值使用函数atoi(),数值转字符串使用printf系列函数. boost中使用转换函数操作符lexical_cast<>进行转换,实际上是模板函数.自定义类型,要 ...
- springboot整合Ehcache
首先引入maven包: <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...
- cn_office_professional_plus_2010_x86_515 安装激活方法解决方案64bit
一:首先选择 Office 2010 Toolkit.exe 右键 选择属性 –兼容性 然后 选择以管理员身份运行此程序 然后 双击 Office 2010 Toolkit.exe 需要安装的工具及 ...
- LeetCode-11-6
1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a ...
- Personal Ubuntu
@1:修改了打开主文件夹的快捷键 CTRL + ALT + R @2:增加了强制关闭程序的快捷键CTRL + ALT+ X,程序为~/lxw0109/ownAdmin/closeProgram.sh( ...