天天看点

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

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