javaWeb 文件上传功能
2016-05-26 16:37
525 查看
首先要下载两个jar包,点击我的网盘地址即可下载
http://pan.baidu.com/s/1o7C5iP0
</pre><pre name="code" class="java">比较重点的几个类:FileItem,<span style="font-family: Arial, Helvetica, sans-serif;">servletFileUpload,</span><pre name="code" class="java">FileItemFactory
下面是具体代码
不但可以传文本,还可以传各种其他的文件
<pre name="code" class="java">package com.xyp.servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.DiskFileUpload; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * Servlet implementation class UploadServlet */ @WebServlet(value="/UploadServlet") public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public UploadServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8");//设置编码 response.getWriter().println("请以post方式上传文件");//输出信息 } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ @SuppressWarnings("unchecked") //消除unchecked warning protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8");//设置response编码 response.setContentType("text/html");//设置response输出类型 File file1 = null,file2 = null; String description1 = null,description2 = null; PrintWriter out = response.getWriter(); FileItemFactory factory = new DiskFileItemFactory();
<span style="white-space:pre"> </span>//建立FileItem工厂,可以设置缓存在内存或者缓存在硬盘 ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
<span style="white-space:pre"> </span>//设置servletFileUpload使用刚才建立的FileItem工厂 try { List<FileItem> list=servletFileUpload.parseRequest(request);//将结果放置在List中,<span style="font-family: Arial, Helvetica, sans-serif;">解析request</span> out.println("遍历所有的FileItem...<br/>"); for(FileItem fileItem:list){ //遍历所有的FileItem
<span style="white-space:pre"> </span>//打出所有上传的标签的name属性值 System.out.println(fileItem.getFieldName()); //获取所有fileitem是文件的文件名 String str = new String(fileItem.getName()); if(fileItem.isFormField()){ //如果是文本域 if("description1".equals(fileItem.getFieldName())){//如果是该参数 out.println("遍历到 description1...<br/>"); description1 = new String(fileItem.getString().getBytes(),"UTF-8"); } if("description2".equals(fileItem.getFieldName())){//如果是该参数 out.println("遍历到 description2...<br/>"); description2 = new String(fileItem.getString().getBytes(),"UTF-8"); } }else{ //否则为文件域 if("file1".equals(fileItem.getFieldName())&&!"".equals(str)){<span style="font-family: Arial, Helvetica, sans-serif;">//如果name=file1,并且文件名不为空字符串</span> File remoteFile= new File(new String(fileItem.getName().getBytes(),"UTF-8")); out.println("遍历到file1...<br/>"); out.println("客户端文件位置:"+remoteFile.getAbsolutePath()+"<br/>"); //服务端文件,放在upload文件夹下 file1 = new File(this.getServletContext().getRealPath("attachment"),remoteFile.getName());<span style="font-family: Arial, Helvetica, sans-serif;">//创建file实例</span> file1.getParentFile().mkdirs();//创建文件夹路径 file1.createNewFile();//创建新文件 InputStream ins = fileItem.getInputStream();//FileItem的内容 OutputStream ous = new FileOutputStream(file1);//输出到文件中 try { byte[] buffer = new byte[1024];//字节缓存 int len = 0;//实际缓存长度 while((len=ins.read(buffer))>-1){//循环读入缓存 ous.write(buffer,0,len); //ous.write(buffer); out.println("已保存文件"+file1.getAbsolutePath()+"<br/>"); } }finally{ ous.close(); ins.close(); } } if("file2".equals(fileItem.getFieldName())&&!"".equals(str)){//如果name=file2,并且文件名不为空字符串 File remoteFile= new File(new String(fileItem.getName().getBytes(),"UTF-8")); out.println("遍历到file2...<br/>"); out.println("客户端文件位置:"+remoteFile.getAbsolutePath()+"<br/>"); //服务端文件,放在upload文件夹下 file2 = new File(this.getServletContext().getRealPath("attachment"),remoteFile.getName());//创建file实例 file2.getParentFile().mkdirs();//创建文件夹路径 file2.createNewFile();//创建新文件 InputStream ins = fileItem.getInputStream();//FileItem的内容 OutputStream ous = new FileOutputStream(file2);//输出到文件中 try { byte[] buffer = new byte[1024];//字节缓存 int len = 0;//实际缓存长度 while((len=ins.read(buffer))>-1){//循环读入缓存 ous.write(buffer,0,len); out.println("已保存文件"+file1.getAbsolutePath()+"<br/>"); } }finally{ ous.close(); ins.close(); } } } } out.println("Request解析完毕"); }catch (Exception e) { e.printStackTrace(); } if(file1 !=null){//输出file1链接 out.println("<div class='line'>"); out.println("<div align='left' class='leftDiv'>file1:</div>"); out.println("<div align='left' class='rightDiv'>"); out.println("<a href='"+request.getContextPath()+"/attachm ent/"+file1.getName()+"'target=_blank>"+file1.getName()+"</a>"); out.println("</div>"); out.println("</div>"); } if(file2 !=null){//输出file2链接 out.println("<div class='line'>"); out.println("<div align='left' class='leftDiv'>file2:</div>"); out.println("<div align='left' class='rightDiv'>"); out.println("<a href='"+request.getContextPath()+"/attachment/"+file2.getName()+"'target=_blank>"+file2.getName()+"</a>"); out.println("</div>"); out.println("</div>"); } out.println("<div class='line'>"); out.println("<div align='left' class='leftDiv'>description1:</div>"); out.println("<div align='left' class='rightDiv'>"); out.println(description1); out.println("<div class='line'>"); out.println("<div align='left' class='leftDiv'>description2:</div>"); out.println("<div align='left' class='rightDiv'>"); out.println(description2); out.println("</div>"); out.println("</div>"); } }
前端代码:
<pre name="code" class="html"><!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="/servlet-back/UploadServlet" method="post" enctype="multipart/form-data"> <div align="center"><br/> <fieldset style="width:80%"> <legend>上传文件</legend> <div class="line"> <div align="left" class="lefeDiv">上传文件一</div> <div align="left" class="rightDiv"> <input type="file" name="file1" class="text"> </div> </div> <div class="line"> <div align="left" class="lefeDiv">上传文件二</div> <div align="left" class="rightDiv"> <input type="file" name="file2" class="text"> </div> </div> <div class="line"> <div align="left" class="lefeDiv">上传文件说明一</div> <div align="left" class="rightDiv"> <input type="text" name="description1" class="text"> </div> </div> <div class="line"> <div align="left" class="lefeDiv">上传文件说明二</div> <div align="left" class="rightDiv"> <input type="text" name="description2" class="text"> </div> </div> <div class="line"> <div align="left" class="lefeDiv"></div> <div align="left" class="rightDiv"><br/> <input type="submit" value="上传文件" class="button"> </div> </div> </fieldset> </div> </form> </body> </html>
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树