webwork保存图片到数据库

来源:百度文库 编辑:神马文学网 时间:2024/04/28 20:04:40
开发中遇到这么一个要求,用户USER这个PO里需要保存用户的照片。一般情况下有两种处理方法:
一是直接保存图片到数据库;二是保存图片到服务器端,PO字段保存一个联接。考虑到用户照片
一般较小,采用第一种方法。
public class User extends Principal {
private byte[] photo;   //考虑与各种数据库兼容问题
public byte[] getPhoto() {
return photo;
}
public void setPhoto(byte[] photo) {
this.photo = photo;
}
..............
}
页面里面,直接用webwork的FileUploadInterceptor拦截
<@ww.form enctype="multipart/form-data" action="doUpdateUser" method="post">

<@ww.file label="%{getText(‘user.photo‘)}" name="photo" />

xwork.xml里的配置



image/x-png,image/gif,image/pjpeg


/organization/user.ftl


/organization/user.ftl

引用默认的拦截器栈,栈里已经包含FileUploadInterceptor拦截,这里配置FileUploadInterceptor拦截的参数,设定上传的文件为图片
格式
Action类
public class OrganizationAction extends BaseOrganizationAction{
private File photo; //与页面里的上传文件字段名对应
private OutputStream outPhoto
/**
* 更新用户信息
*
* @return
* @throws Exception
*/
public String updateUser() throws Exception {
//以下为保存图片,视情况修改
if (null != photo) {
FileInputStream file = new FileInputStream(photo);
int length = file.available();
byte[] buffer = new byte[length];
file.read(buffer);
file.close();
user.setPhoto(buffer);   //将上传的图片转换为字节数组存储到PO中
}
organizationService.updateUser(user);
return SUCCESS;
}
public String getUserPhoto() throws Exception {
user = organizationService.getUserById(userId);
if (user.getPhoto() != null) {
outPhoto = this.getResponse().getOutputStream(); //将PO中字节数组转换为输出流
outPhoto.write(user.getPhoto());
outPhoto.flush();
outPhoto.close();
}
return SUCCESS;
}
}
这样就OK了,考虑一个问题,就是action 必须要指定一个result ,实际这里的图片显示仅仅是要一个输出流

而我的配置里面是
/organization/user.ftl
不知道这会不会有什么影响。或者这样?
/organization/blank.ftl