Java文件上传下载、邮件收发实例代码
文件上传下载
前台:
1.提交方式:post
2.表单中有文件上传的表单项:<inputtype=”file”/>
3.指定表单类型:
默认类型:enctype="application/x-www-form-urlencoded"
文件上传类型:multipart/form-data
FileUpload
文件上传功能开发中比较常用,apache也提供了文件上传组件!
FileUpload组件:
1.下载源码
2.项目中引入jar文件
commons-fileupload-1.2.1.jar【文件上传组件核心jar包】
commons-io-1.4.jar【封装了对文件处理的相关工具类】
使用:
publicclassUploadServletextendsHttpServlet{
//upload目录,保存上传的资源
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
/*********文件上传组件:处理文件上传************/
try{
//1.文件上传工厂
FileItemFactoryfactory=newDiskFileItemFactory();
//2.创建文件上传核心工具类
ServletFileUploadupload=newServletFileUpload(factory);
//一、设置单个文件允许的最大的大小:30M
upload.setFileSizeMax(30*1024*1024);
//二、设置文件上传表单允许的总大小:80M
upload.setSizeMax(80*1024*1024);
//三、设置上传表单文件名的编码
//相当于:request.setCharacterEncoding("UTF-8");
upload.setHeaderEncoding("UTF-8");
//3.判断:当前表单是否为文件上传表单
if(upload.isMultipartContent(request)){
//4.把请求数据转换为一个个FileItem对象,再用集合封装
List<FileItem>list=upload.parseRequest(request);
//遍历:得到每一个上传的数据
for(FileItemitem:list){
//判断:普通文本数据
if(item.isFormField()){
//普通文本数据
StringfieldName=item.getFieldName();//表单元素名称
Stringcontent=item.getString();//表单元素名称,对应的数据
//item.getString("UTF-8");指定编码
System.out.println(fieldName+""+content);
}
//上传文件(文件流)---->上传到upload目录下
else{
//普通文本数据
StringfieldName=item.getFieldName();//表单元素名称
Stringname=item.getName();//文件名
Stringcontent=item.getString();//表单元素名称,对应的数据
Stringtype=item.getContentType();//文件类型
InputStreamin=item.getInputStream();//上传文件流
/*
*四、文件名重名
*对于不同用户readme.txt文件,不希望覆盖!
*后台处理:给用户添加一个唯一标记!
*/
//a.随机生成一个唯一标记
Stringid=UUID.randomUUID().toString();
//b.与文件名拼接
name=id+"#"+name;
//获取上传基路径
Stringpath=getServletContext().getRealPath("/upload");
//创建目标文件
Filefile=newFile(path,name);
//工具类,文件上传
item.write(file);
item.delete();//删除系统产生的临时文件
System.out.println();
}
}
}
else{
System.out.println("当前表单不是文件上传表单,处理失败!");
}
}catch(Exceptione){
e.printStackTrace();
}
}
//手动实现过程
privatevoidupload(HttpServletRequestrequest)throwsIOException,
UnsupportedEncodingException{
/*
request.getParameter("");//GET/POST
request.getQueryString();//获取GET提交的数据
request.getInputStream();//获取post提交的数据*/
/***********手动获取文件上传表单数据************/
//1.获取表单数据流
InputStreamin=request.getInputStream();
//2.转换流
InputStreamReaderinStream=newInputStreamReader(in,"UTF-8");
//3.缓冲流
BufferedReaderreader=newBufferedReader(inStream);
//输出数据
Stringstr=null;
while((str=reader.readLine())!=null){
System.out.println(str);
}
//关闭
reader.close();
inStream.close();
in.close();
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
this.doGet(request,response);
}
}
案例:
Index.jsp
<body>
<ahref="${pageContext.request.contextPath}/upload.jsp">文件上传</a>
<ahref="${pageContext.request.contextPath}/fileServlet?method=downList">文件下载</a>
</body>
Upload.jsp
<body>
<formname="frm_test"action="${pageContext.request.contextPath}/fileServlet?method=upload"method="post"enctype="multipart/form-data">
<%--<inputtype="hidden"name="method"value="upload">--%>
用户名:<inputtype="text"name="userName"><br/>
文件:<inputtype="file"name="file_img"><br/>
<inputtype="submit"value="提交">
</form>
</body>
FileServlet.Java
/**
*处理文件上传与下载
*@authorJie.Yuan
*
*/
publicclassFileServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//获取请求参数:区分不同的操作类型
Stringmethod=request.getParameter("method");
if("upload".equals(method)){
//上传
upload(request,response);
}
elseif("downList".equals(method)){
//进入下载列表
downList(request,response);
}
elseif("down".equals(method)){
//下载
down(request,response);
}
}
/**
*1.上传
*/
privatevoidupload(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
try{
//1.创建工厂对象
FileItemFactoryfactory=newDiskFileItemFactory();
//2.文件上传核心工具类
ServletFileUploadupload=newServletFileUpload(factory);
//设置大小限制参数
upload.setFileSizeMax(10*1024*1024);//单个文件大小限制
upload.setSizeMax(50*1024*1024);//总文件大小限制
upload.setHeaderEncoding("UTF-8");//对中文文件编码处理
//判断
if(upload.isMultipartContent(request)){
//3.把请求数据转换为list集合
List<FileItem>list=upload.parseRequest(request);
//遍历
for(FileItemitem:list){
//判断:普通文本数据
if(item.isFormField()){
//获取名称
Stringname=item.getFieldName();
//获取值
Stringvalue=item.getString();
System.out.println(value);
}
//文件表单项
else{
/********文件上传***********/
//a.获取文件名称
Stringname=item.getName();
//----处理上传文件名重名问题----
//a1.先得到唯一标记
Stringid=UUID.randomUUID().toString();
//a2.拼接文件名
name=id+"#"+name;
//b.得到上传目录
StringbasePath=getServletContext().getRealPath("/upload");
//c.创建要上传的文件对象
Filefile=newFile(basePath,name);
//d.上传
item.write(file);
item.delete();//删除组件运行时产生的临时文件
}
}
}
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*2.进入下载列表
*/
privatevoiddownList(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//实现思路:先获取upload目录下所有文件的文件名,再保存;跳转到down.jsp列表展示
//1.初始化map集合Map<包含唯一标记的文件名,简短文件名>;
Map<String,String>fileNames=newHashMap<String,String>();
//2.获取上传目录,及其下所有的文件的文件名
StringbathPath=getServletContext().getRealPath("/upload");
//目录
Filefile=newFile(bathPath);
//目录下,所有文件名
Stringlist[]=file.list();
//遍历,封装
if(list!=null&&list.length>0){
for(inti=0;i<list.length;i++){
//全名
StringfileName=list[i];
//短名
StringshortName=fileName.substring(fileName.lastIndexOf("#")+1);
//封装
fileNames.put(fileName,shortName);
}
}
//3.保存到request域
request.setAttribute("fileNames",fileNames);
//4.转发
request.getRequestDispatcher("/downlist.jsp").forward(request,response);
}
/**
*3.处理下载
*/
privatevoiddown(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//获取用户下载的文件名称(url地址后追加数据,get)
StringfileName=request.getParameter("fileName");
fileName=newString(fileName.getBytes("ISO8859-1"),"UTF-8");
//先获取上传目录路径
StringbasePath=getServletContext().getRealPath("/upload");
//获取一个文件流
InputStreamin=newFileInputStream(newFile(basePath,fileName));
//如果文件名是中文,需要进行url编码
fileName=URLEncoder.encode(fileName,"UTF-8");
//设置下载的响应头
response.setHeader("content-disposition","attachment;fileName="+fileName);
//获取response字节流
OutputStreamout=response.getOutputStream();
byte[]b=newbyte[1024];
intlen=-1;
while((len=in.read(b))!=-1){
out.write(b,0,len);
}
//关闭
out.close();
in.close();
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
this.doGet(request,response);
}
}
邮件开发
准备工作,环境搭建:
1.本地搭建一个邮件服务器
易邮服务器,eyoumailserversetup.exe
2.新建邮箱账号
张三给李四发邮件。
步骤1:
新建域名:工具,服务器设置,单域名框中输入itcast.com
步骤2:
新建邮箱账号:zhangsan@itcast.com
lisi@itcast.com
3.安装foxmail
配置邮件发送服务器(smtp):localhost25
邮件接收服务器(pop3):localhost110
再新建账号,就可以接收邮件了!
注意
注意
如果是web项目,因为javaee自带的有邮件功能,可能存在问题!
我们要用自己的mail.jar文件功能!需要删除javaee中mail包!
使用:
JavaMail开发,先引入jar文件:
activation.jar【如果使用jdk1.6或以上版本,可以不用这个jar文件】
mail.jar【邮件发送核心包】
/**
*1.发送一封普通邮件
*@authorJie.Yuan
*
*/
publicclassApp_SendMail{
@Test
publicvoidtestSend()throwsException{
//0.邮件参数
Propertiesprop=newProperties();
prop.put("mail.transport.protocol","smtp");//指定协议
prop.put("mail.smtp.host","localhost");//主机stmp.qq.com
prop.put("mail.smtp.port",25);//端口
prop.put("mail.smtp.auth","true");//用户密码认证
prop.put("mail.debug","true");//调试模式
//1.创建一个邮件的会话
Sessionsession=Session.getDefaultInstance(prop);
//2.创建邮件体对象(整封邮件对象)
MimeMessagemessage=newMimeMessage(session);
//3.设置邮件体参数:
//3.1标题
message.setSubject("我的第一封邮件");
//3.2邮件发送时间
message.setSentDate(newDate());
//3.3发件人
message.setSender(newInternetAddress("zhangsan@itcast.com"));
//3.4接收人
message.setRecipient(RecipientType.TO,newInternetAddress("lisi@itcast.com"));
//3.5内容
message.setText("你好,已经发送成功!正文....");//简单纯文本邮件
message.saveChanges();//保存邮件(可选)
//4.发送
Transporttrans=session.getTransport();
trans.connect("zhangsan","888");
//发送邮件
trans.sendMessage(message,message.getAllRecipients());
trans.close();
}
}
带图片
/**
*带图片资源的邮件
*@authorJie.Yuan
*
*/
publicclassApp_2SendWithImg{
//初始化参数
privatestaticPropertiesprop;
//发件人
privatestaticInternetAddresssendMan=null;
static{
prop=newProperties();
prop.put("mail.transport.protocol","smtp");//指定协议
prop.put("mail.smtp.host","localhost");//主机stmp.qq.com
prop.put("mail.smtp.port",25);//端口
prop.put("mail.smtp.auth","true");//用户密码认证
prop.put("mail.debug","true");//调试模式
try{
sendMan=newInternetAddress("zhangsan@itcast.com");
}catch(AddressExceptione){
thrownewRuntimeException(e);
}
}
@Test
publicvoidtestSend()throwsException{
//1.创建邮件会话
Sessionsession=Session.getDefaultInstance(prop);
//2.创建邮件对象
MimeMessagemessage=newMimeMessage(session);
//3.设置参数:标题、发件人、收件人、发送时间、内容
message.setSubject("带图片邮件");
message.setSender(sendMan);
message.setRecipient(RecipientType.TO,newInternetAddress("lisi@itcast.com"));
message.setSentDate(newDate());
/***************设置邮件内容:多功能用户邮件(related)*******************/
//4.1构建一个多功能邮件块
MimeMultipartrelated=newMimeMultipart("related");
//4.2构建多功能邮件块内容=左侧文本+右侧图片资源
MimeBodyPartcontent=newMimeBodyPart();
MimeBodyPartresource=newMimeBodyPart();
//设置具体内容:a.资源(图片)
StringfilePath=App_2SendWithImg.class.getResource("8.jpg").getPath();
DataSourceds=newFileDataSource(newFile(filePath));
DataHandlerhandler=newDataHandler(ds);
resource.setDataHandler(handler);
resource.setContentID("8.jpg");//设置资源名称,给外键引用
//设置具体内容:b.文本
content.setContent("<imgsrc='cid:8.jpg'/>好哈哈!","text/html;charset=UTF-8");
related.addBodyPart(content);
related.addBodyPart(resource);
/*******4.3把构建的复杂邮件快,添加到邮件中********/
message.setContent(related);
//5.发送
Transporttrans=session.getTransport();
trans.connect("zhangsan","888");
trans.sendMessage(message,message.getAllRecipients());
trans.close();
}
}
图片+附件
/**
*3.带图片资源以及附件的邮件
*@authorJie.Yuan
*
*/
publicclassApp_3ImgAndAtta{
//初始化参数
privatestaticPropertiesprop;
//发件人
privatestaticInternetAddresssendMan=null;
static{
prop=newProperties();
prop.put("mail.transport.protocol","smtp");//指定协议
prop.put("mail.smtp.host","localhost");//主机stmp.qq.com
prop.put("mail.smtp.port",25);//端口
prop.put("mail.smtp.auth","true");//用户密码认证
prop.put("mail.debug","true");//调试模式
try{
sendMan=newInternetAddress("zhangsan@itcast.com");
}catch(AddressExceptione){
thrownewRuntimeException(e);
}
}
@Test
publicvoidtestSend()throwsException{
//1.创建邮件会话
Sessionsession=Session.getDefaultInstance(prop);
//2.创建邮件对象
MimeMessagemessage=newMimeMessage(session);
//3.设置参数:标题、发件人、收件人、发送时间、内容
message.setSubject("带图片邮件");
message.setSender(sendMan);
message.setRecipient(RecipientType.TO,newInternetAddress("lisi@itcast.com"));
message.setSentDate(newDate());
/*
*带附件(图片)邮件开发
*/
//构建一个总的邮件块
MimeMultipartmixed=newMimeMultipart("mixed");
//--->总邮件快,设置到邮件对象中
message.setContent(mixed);
//左侧:(文本+图片资源)
MimeBodyPartleft=newMimeBodyPart();
//右侧:附件
MimeBodyPartright=newMimeBodyPart();
//设置到总邮件块
mixed.addBodyPart(left);
mixed.addBodyPart(right);
/******附件********/
Stringattr_path=this.getClass().getResource("a.docx").getPath();
DataSourceattr_ds=newFileDataSource(newFile(attr_path));
DataHandlerattr_handler=newDataHandler(attr_ds);
right.setDataHandler(attr_handler);
right.setFileName("a.docx");
/***************设置邮件内容:多功能用户邮件(related)*******************/
//4.1构建一个多功能邮件块
MimeMultipartrelated=newMimeMultipart("related");
//---->设置到总邮件快的左侧中
left.setContent(related);
//4.2构建多功能邮件块内容=左侧文本+右侧图片资源
MimeBodyPartcontent=newMimeBodyPart();
MimeBodyPartresource=newMimeBodyPart();
//设置具体内容:a.资源(图片)
StringfilePath=App_3ImgAndAtta.class.getResource("8.jpg").getPath();
DataSourceds=newFileDataSource(newFile(filePath));
DataHandlerhandler=newDataHandler(ds);
resource.setDataHandler(handler);
resource.setContentID("8.jpg");//设置资源名称,给外键引用
//设置具体内容:b.文本
content.setContent("<imgsrc='cid:8.jpg'/>好哈哈!","text/html;charset=UTF-8");
related.addBodyPart(content);
related.addBodyPart(resource);
//5.发送
Transporttrans=session.getTransport();
trans.connect("zhangsan","888");
trans.sendMessage(message,message.getAllRecipients());
trans.close();
}
}
以上所述是小编给大家介绍的Java文件上传下载、邮件收发实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!