servlet接收客户端传过来的图片,保留验证

来源:互联网 发布:2016网购大数据 编辑:程序博客网 时间:2024/05/20 19:45
  1. public class Uploadfile1 extends HttpServlet {  
  2.   
  3.     @Override  
  4.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  5.             throws ServletException, IOException {  
  6.         request.setCharacterEncoding("utf-8");  
  7.         //获得磁盘文件条目工厂。  
  8.         DiskFileItemFactory factory = new DiskFileItemFactory();  
  9.         //获取文件上传需要保存的路径,upload文件夹需存在。  
  10.         String path = request.getSession().getServletContext().getRealPath("/upload");  
  11.         //设置暂时存放文件的存储室,这个存储室可以和最终存储文件的文件夹不同。因为当文件很大的话会占用过多内存所以设置存储室。  
  12.         factory.setRepository(new File(path));  
  13.         //设置缓存的大小,当上传文件的容量超过缓存时,就放到暂时存储室。  
  14.         factory.setSizeThreshold(1024*1024);  
  15.         //上传处理工具类(高水平API上传处理?)  
  16.         ServletFileUpload upload = new ServletFileUpload(factory);  
  17.           
  18.         try{  
  19.             //调用 parseRequest(request)方法  获得上传文件 FileItem 的集合list 可实现多文件上传。  
  20.             List<FileItem> list = (List<FileItem>)upload.parseRequest(request);  
  21.             for(FileItem item:list){  
  22.                 //获取表单属性名字。  
  23.                 String name = item.getFieldName();  
  24.                 //如果获取的表单信息是普通的文本信息。即通过页面表单形式传递来的字符串。  
  25.                 if(item.isFormField()){  
  26.                     //获取用户具体输入的字符串,  
  27.                     String value = item.getString();  
  28.                     request.setAttribute(name, value);  
  29.                 }  
  30.                 //如果传入的是非简单字符串,而是图片,音频,视频等二进制文件。  
  31.                 else{   
  32.                     //获取路径名  
  33.                     String value = item.getName();  
  34.                     //取到最后一个反斜杠。  
  35.                     int start = value.lastIndexOf("\\");  
  36.                     //截取上传文件的 字符串名字。+1是去掉反斜杠。  
  37.                     String filename = value.substring(start+1);  
  38.                     request.setAttribute(name, filename);  
  39.                       
  40.                     /*第三方提供的方法直接写到文件中。 
  41.                      * item.write(new File(path,filename));*/  
  42.                     //收到写到接收的文件中。  
  43.                     OutputStream out = new FileOutputStream(new File(path,filename));  
  44.                     InputStream in = item.getInputStream();  
  45.                       
  46.                     int length = 0;  
  47.                     byte[] buf = new byte[1024];  
  48.                     System.out.println("获取文件总量的容量:"+ item.getSize());  
  49.                       
  50.                     while((length = in.read(buf))!=-1){  
  51.                         out.write(buf,0,length);  
  52.                     }  
  53.                     in.close();  
  54.                     out.close();  
  55.                 }  
  56.             }  
  57.         }catch(Exception e){  
  58.             e.printStackTrace();  
  59.         }  
  60.           
  61.     }  
  62. }  
0 0
原创粉丝点击