文件上传与下载和邮件开发

一 文件上传

FileUpload组件:文件上传组件

jar包下载地址:http://ftp.cuhk.edu.hk/pub/packages/apache.org/commons/fileupload

导入jar包:

  1. commons-fileupload-1.2.1.jar
  2. 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
新建邮箱账号:[email protected]

导入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("[email protected]"));
 //接收人
 message.setRecipient(RecipientType.TO,new InternetAddress("[email protected]"));
 /**********************设置邮件内容*************************************/
 //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包

猜你喜欢

转载自blog.csdn.net/smile_po/article/details/78568079