码迷,mamicode.com
首页 > 其他好文 > 详细

博客发表代码测试

时间:2016-10-22 23:55:54      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:创建目录   部分   lis   forward   失败   临时文件   exce   循环   void   

 1 import java.io.File;
 2 import java.io.FileOutputStream;
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.util.List;
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 import org.apache.commons.fileupload.FileItem;
11 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
12 import org.apache.commons.fileupload.servlet.ServletFileUpload;
13 
14 public class UploadHandleServlet extends HttpServlet {
15 
16     public void doGet(HttpServletRequest request, HttpServletResponse response)
17             throws ServletException, IOException {
18                 //得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全
19                 String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
20                 File file = new File(savePath);
21                 //判断上传文件的保存目录是否存在
22                 if (!file.exists() && !file.isDirectory()) {
23                     System.out.println(savePath+"目录不存在,需要创建");
24                     //创建目录
25                     file.mkdir();
26                 }
27                 //消息提示
28                 String message = "";
29                 try{
30                     //使用Apache文件上传组件处理文件上传步骤:
31                     //1、创建一个DiskFileItemFactory工厂
32                     DiskFileItemFactory factory = new DiskFileItemFactory();
33                     //2、创建一个文件上传解析器
34                     ServletFileUpload upload = new ServletFileUpload(factory);
35                      //解决上传文件名的中文乱码
36                     upload.setHeaderEncoding("UTF-8"); 
37                     //3、判断提交上来的数据是否是上传表单的数据
38                     if(!ServletFileUpload.isMultipartContent(request)){
39                         //按照传统方式获取数据
40                         return;
41                     }
42                     //4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
43                     List<FileItem> list = upload.parseRequest(request);
44                     for(FileItem item : list){
45                         //如果fileitem中封装的是普通输入项的数据
46                         if(item.isFormField()){
47                             String name = item.getFieldName();
48                             //解决普通输入项的数据的中文乱码问题
49                             String value = item.getString("UTF-8");
50                             //value = new String(value.getBytes("iso8859-1"),"UTF-8");
51                             System.out.println(name + "=" + value);
52                         }else{//如果fileitem中封装的是上传文件
53                             //得到上传的文件名称,
54                             String filename = item.getName();
55                             System.out.println(filename);
56                             if(filename==null || filename.trim().equals("")){
57                                 continue;
58                             }
59                             //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:  c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
60                             //处理获取到的上传文件的文件名的路径部分,只保留文件名部分
61                             filename = filename.substring(filename.lastIndexOf("\\")+1);
62                             //获取item中的上传文件的输入流
63                             InputStream in = item.getInputStream();
64                             //创建一个文件输出流
65                             FileOutputStream out = new FileOutputStream(savePath + "\\" + filename);
66                             //创建一个缓冲区
67                             byte buffer[] = new byte[1024];
68                             //判断输入流中的数据是否已经读完的标识
69                             int len = 0;
70                             //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
71                             while((len=in.read(buffer))>0){
72                                 //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
73                                 out.write(buffer, 0, len);
74                             }
75                             //关闭输入流
76                             in.close();
77                             //关闭输出流
78                             out.close();
79                             //删除处理文件上传时生成的临时文件
80                             item.delete();
81                             message = "文件上传成功!";
82                         }
83                     }
84                 }catch (Exception e) {
85                     message= "文件上传失败!";
86                     e.printStackTrace();
87                     
88                 }
89                 request.setAttribute("message",message);
90                 request.getRequestDispatcher("/message.jsp").forward(request, response);
91     }
92 
93     public void doPost(HttpServletRequest request, HttpServletResponse response)
94             throws ServletException, IOException {
95 
96         doGet(request, response);
97     }
98 }

 

博客发表代码测试

标签:创建目录   部分   lis   forward   失败   临时文件   exce   循环   void   

原文地址:http://www.cnblogs.com/yangly/p/5988646.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!