一 文件上传
FileUpload组件:文件上传组件
jar包下载地址:http://ftp.cuhk.edu.hk/pub/packages/apache.org/commons/fileupload
导入jar包:
- commons-fileupload-1.2.1.jar
- commons-io-1.4.jar
使用示例:
写在servlet的doGet()/doPost()方法里面
//在jsp页面的form表单中要设置提交方式为post,并且设置enctype="multipart/form-data"
//创建文件上传工厂类
FileItemFactory fac = new DiskFileItemFactory();
//创建文件上传核心类对象
ServletFileUpload upload = new ServletFileUpload(fac);
//upload.setFileSizeMax(fileSizeMax);//设置单个文件的最大大小
//upload.setSizeMax(SizeMax);//设置总文件大小
//判断,当前表单是否为文件上传表单
if(upload.isMultipartContent(request))
{
//把请求数据转换为FileItem对象的集合
List<FileItem> list = upload.parseRequest(request);
//遍历
for(FileItem item : list)
{
// 判断是普通表单,还是文件上传项
if(item.isFormField())
{
//普通表单
String fieldName = item.getFieldName();//文本框名称
String content = item.getString();//文本框的值
}
else
{
//文件上传表单
item.getString();//获取上传数据
item.getString("UTF-8");//获取上传数据,处理中文
item.getContentType();//获取文件上传类型
item.getInputStream();//获取文件流
String name = item.getName();//获取文件名
//为了避免同名文件覆盖,要生成唯一文件名,随机生成一个唯一标记,也可以用上传的当前时间作为唯一标记
String id = UUID.randomUUID().toString();
name = id +"#"+ name;
//获取上传的目录路径
String basePath = getServletContext().getRealPath("/upload");
File file = new File(basePath,name);
item.wirte(file);//写文件
item.delete();//删除临时文件
}
}
}
else
{
}
二 文件下载
示例代码
//fileName就是文件上传时生成的唯一文件名
//获取用户下载的文件名称 get方式提交
String fileName = request.getParameter("fileName");
fileName = new String(fileName.getBytes("ISO8859-1","UTF-8"));
//获取文件目录路径
String basePath = getServletContext().getRealPath("/upload");
File file = new File(basePath,name);
//设置下载响应头
//如果文件名是中文,需要进行url编码
fileName = URLEncoder.encode(fileName,"UTF-8");
response.setHeader("content-disposition","attachment;fileName="+fileName);
//获取文件流
InputStream in = new FileInputStream(new File(basePath,fileName));
//获取response字节流
OutputStream out = response.getOutputStream();
byte[] buf = new byte[1024];
int len = 0;
while((len=in.read(buf))!=-1)
{
out.write(buf,0,len);
}
// 关闭
out.close();
in.close();
三 java邮件开发
准备工作:
1. 搭建一个邮件服务器:使用易邮服务器(eyoumailserversetup.exe)
2. 新建邮箱账号:
新建域名:工具—-服务其设置—单域名框中输入域名如:yz.com
新建邮箱账号:zhangsan@yz.com
导入jar包:activation.jar和mail.jar
发送邮件示例代码:
public class SendMail {
public void testSend() throws Exception {
//邮件参数
Properties prop = new Properties();
prop.put("mail.transport.protocol","smtp");//指定协议
prop.put("mail.smtp.host","localhost");//主机 因为是在本地搭建的邮件服务器,所以是localhost
prop.put("mail.smtp.port",25);//端口
prop.put("mail.smtp.auth","true");//用户密码认证
prop.put("mail.debug","true");//调试模式
//创建一个邮件会话
Session session = Session.getDefaultInstance(prop);
//创建一个邮件体
MimeMessage message = new MineMessage(session);
//邮件标题
message.setSubject("第一封邮件");
//邮件发送时间
message.setSendDate(new Date());
//发件人
message.setSender(new InternetAddress("zhangsan@yz.com"));
//接收人
message.setRecipient(RecipientType.TO,new InternetAddress("lisi@yz.com"));
/**********************设置邮件内容*************************************/
//message.setText("邮件内容");//设置发纯文本内容
//message.setContent("<a href="#">百度</a>","text/html;charset=UTF-8");//设置发超链接文本
//带附件的邮件
MimeMultipart mixed = new MimeMultipart("mixed");
//总邮件块,设置到邮件对象中
message.setContent(mixed);
//左侧:文本+图片资源
MimeBodyPart left = new MimeBodyPart();
//右侧:附件
MimeBodyPart right = new MimeBodyPart();
//设置总邮件块
mixed.addBodyPart(left);
mixed.addBodyPart(right);
//设置附件
String attr_path = SendMail.class.getResource("a.docx").getPath();
DataSource attr_ds = new FileDataSource(new File(attr_path));
DataHandler attr_handler = new DataHandler(attr_ds);
right.setDataHandler(attr_handler);
//构建一个多功能邮件块
MimeMultipart related = new MimeMultipart("related");
left.setContent(related);//设置到总邮件块的左侧中
MimeBodyPart content = new MimeBodyPart();
MimeBodyPart resource = new MimeBodyPary();
//设置具体内容
String filePath = SendMail.class.getResource("1.jpg").getPath();
DataSource ds = new FileDataSource(new File(filePath));
DataHandler handler = new DataHandler(ds);
resource.setDataHandler(handler);
resource.setContentID("8.jpg");
content.setContent("<img src='cid:8.jpg'/> 你好!","text/html;charset=UTF-8");
//把构建的多功能邮件块添加到邮件中
message.setContent(related);
//发送
Transport trans = session.getTransport();
trans.connect("zhangsan","666");//指定发送人的账号和密码
//指定收件人,发送邮件
trans.sendMessage(message,message.getAllRecipients())
trans.close();
}
}
注释:如果是web项目,因为javaee自带的有邮件功能,而我们要用自己的mail.jar包功能,因此需要删除javaee中mail包