common-fileUpload 上传图片到服务器端


转自:http://niewj.iteye.com/blog/1135872


今天要用到一个图片上传的,听说Struts2就是用的这个,啃了啃鹰文文档,实验了下common-fileupload实验成功了,记录下:

Servlet里doPost()方法贴出:

Java代码   收藏代码
  1. /** 大致步骤为: 
  2.      * 1.准备FileItem工厂; 
  3.      * 2.把工厂交给ServletFileUpload,让他把前端的表单条条信息解析; 
  4.      * 3.处理解析好返回的列表中的每一个具体项 */  
  5.     @SuppressWarnings("unchecked")  
  6.     @Override  
  7.     protected void doPost(HttpServletRequest request,  
  8.             HttpServletResponse response) throws ServletException, IOException {  
  9.   
  10.         /* FileItemFactory是FileItem的工厂,不过它只是个interface, 
  11.          * 有两个实现DiskFileItemFactory和DefaultFileItemFactory; 
  12.          * 但是api里说:"Deprecated. Use DiskFileItemFactory instead." */  
  13.         FileItemFactory itemFactory = new DiskFileItemFactory();  
  14.         /* FileUpload类是用来处理文件的上传,而ServletFileUpload是它的子类, 
  15.          * 可以判断和解析前端的表单类型和表单项信息 */  
  16.         ServletFileUpload upload = new ServletFileUpload(itemFactory);  
  17.         List<FileItem> list = null;  
  18.         try {  
  19.             //parseRequest将前端的表单项项解析为FileItem列表  
  20.             list = upload.parseRequest(request);  
  21.             Iterator<FileItem> it = list.iterator();  
  22.             while (it.hasNext()) {  
  23.                 /* 
  24.                  * 最核心的就是FileItem了,如果form的属性是enctype=multipart/form-data, 
  25.                  * 那么它会用来描述POST请求的form表单的每一个普通表单项和上传项; 
  26.                  * 可以认为每一个input对应的就是一个FileItem;看看FileItem的属性封装就知道了(加入客户端有): 
  27.                  * 用户<input type="text" name="userName"><br>//普通表单项  
  28.                  * 图片1<input type="file" name="img1"/><br/>//上传项  
  29.                  * 1.getContentType()   //普通表单项null;上传项要看类型如jpg,jpeg是image/jpeg;png是image/png;gif是image/gif: 
  30.                  * 2.getFieldName()     //就是前台的name="userName"和name="img1"; 
  31.                  * 3.getString()        //就是用户填写的用户名,如你在表单里输入"root"提交后getString()就得到root; 
  32.                  * 3.getInputStream()   //根据输出判断:普通项是ByteArrayInputStream类型,上传项目是:FileInputStream类型 
  33.                  * 4.getName()          //普通表单项null,上传项为出去目录名后的文件名,如:"ubuntuBackground.jpg" 
  34.                  * 5.getOutputStream()  //输出流,没有深看 
  35.                  * 6.getSize()          //大小:普通为用户输入字符的字节数,上传为文件的大小字节数; 
  36.                  * 7.isFormField()      //这个就是判断是普通项[true],还是上传项[false]; 
  37.                  */  
  38.                 FileItem item = it.next();  
  39.                 /* 过滤下,只有表单项中类型为图片的才保存 */  
  40.                 if ("image/jpeg".equals(item.getContentType())  
  41.                         || "image/gif".equals(item.getContentType())  
  42.                         || "image/png".equals(item.getContentType())) {  
  43.                     InputStream inStream = item.getInputStream();  
  44.                     byte[] b = new byte[1024];  
  45.                     int rb = inStream.read(b);  
  46.                     File file=new File("/home/nie/images/", item.getName());  
  47.                     OutputStream outStream = new FileOutputStream(file);  
  48.                     while (rb != -1) {  
  49.                         outStream.write(b);  
  50.                         rb = inStream.read(b);  
  51.                     }  
  52.                     outStream.flush();  
  53.                     inStream.close();  
  54.                     outStream.close();  
  55.                 }  
  56.             }  
  57.         } catch (FileUploadException e) {  
  58.             e.printStackTrace();  
  59.         }  
  60.     }  
     

 总结来看,重要的就3个东西:

1.FileItemFactory【DiskFileItemFactory】;

2.FileUpload【ServletFileUpload】;

3.FileItem

然后就可以用IO了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值