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文件上传下载、邮件收发实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!