posts - 193,  comments - 520,  trackbacks - 0

开发中遇到这么一个要求,用户USER这个PO里需要保存用户的照片。一般情况下有两种处理方法:一是直接保存图片到数据库;二是保存图片到服务器端,PO字段保存一个联接。考虑到用户照片一般较小,采用第一种方法。

 1 public   class  User  extends  Principal  {
 2      private   byte [] photo;    // 考虑与各种数据库兼容问题
 3      public   byte [] getPhoto()  {
 4          return  photo;
 5     }

 6
 7      public   void  setPhoto( byte [] photo)  {
 8          this .photo  =  photo;
 9     }

10     ..
11 }

12


页面里面,直接用webwork的FileUploadInterceptor拦截

< @ww.form  enctype = " multipart/form-data "  action = " doUpdateUser "   method = " post " >
< image name = " img1 "  src = " /getUserPhoto.action?userId=${user.id} "  width = 90  height = 120  border = " 0 " ></ image >
< @ww.file label = " %{getText('user.photo')} "  name = " photo "   />
</ @ww.form >


xwork.xml里的配置

        < action name = " doUpdateUser "   class = " com.ronghao.organization.action.OrganizationAction "  method = " updateUser " >
            
< interceptor - ref name = " defaultStack " >
                
< param name = " fileUpload.allowedTypes " >
                     image
/ x - png,image / gif,image / pjpeg
                
</ param >
            
</ interceptor - ref >
            
< result name = " success " >/ organization / user.ftl </ result >
        
</ action >

        
< action name = " getUserPhoto "   class = " com.ronghao.organization.action.OrganizationAction "  method = " getUserPhoto " >
            
< result >/ organization / user.ftl </ result >
        
</ action >


引用默认的拦截器栈,栈里已经包含FileUploadInterceptor拦截,这里配置FileUploadInterceptor拦截的参数,设定上传的文件为图片
格式
Action类

 1 public   class  OrganizationAction  extends  BaseOrganizationAction {
 2      private  File photo;   // 与页面里的上传文件字段名对应
 3      private  OutputStream outPhoto
 4
 5       /**
 6      * 更新用户信息
 7      *
 8      *  @return
 9      *  @throws  Exception
10       */

11      public  String updateUser()  throws  Exception  {
12          // 以下为保存图片,视情况修改
13          if  ( null   !=  photo)  {
14             FileInputStream file  =   new  FileInputStream(photo);
15              int  length  =  file.available();
16              byte [] buffer  =   new   byte [length];
17             file.read(buffer);
18             file.close();
19             user.setPhoto(buffer);    // 将上传的图片转换为字节数组存储到PO中
20         }

21         organizationService.updateUser(user);
22          return  SUCCESS;
23     }

24
25      public  String getUserPhoto()  throws  Exception  {
26         user  =  organizationService.getUserById(userId);
27          if  (user.getPhoto()  !=   null {
28             outPhoto  =   this .getResponse().getOutputStream();  // 将PO中字节数组转换为输出流
29             outPhoto.write(user.getPhoto());
30             outPhoto.flush();
31             outPhoto.close();
32         }

33          return  SUCCESS;
34     }

35 }

36


这样就OK了,考虑一个问题,就是action 必须要指定一个result ,实际这里的图片显示仅仅是要一个输出流

< image name = " img1 "  src = " /getUserPhoto.action?userId=${user.id} "  width = 90  height = 120  border = " 0 " ></ image >


而我的配置里面是

< result >/ organization / user.ftl </ result >


不知道这会不会有什么影响。或者这样?

< result >/ organization / blank.ftl </ result >


http://www.blogjava.net/ronghao 荣浩原创,转载请注明出处:)
posted on 2006-06-15 17:14 ronghao 阅读(655) 评论(0)  编辑  收藏 所属分类: 表现层相关

只有注册用户登录后才能发表评论。


网站导航:
 
<2006年6月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

关注工作流和企业业务流程改进。现就职于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

常用链接

留言簿(38)

随笔分类

随笔档案

文章分类

文章档案

常去的网站

搜索

  •  

最新评论

阅读排行榜

评论排行榜