用户头像上传是使用Struts的上传功能,因此需要遵循Struts上传文件的方式。
基本步骤:
1. 在JSP中使用 HTML 表单上传文件, 须把 HTML 表单的 enctype 属性设置为 multipart/form-data, method 属性设置为 post。HTML表单中包含 使用户能选择上传文件。
2. Action 中添加三个文件上传相关的属性。
上传单个文件属性格式
属性一:类型为File,名字为页面file控件名
属性二:类型为String,名字为页面file控件名+ContentType
属性三:类型为String,名字为页面file控件名+FileName
3. 对上传的文件进行处理
1、JSP页面
addUI.jsp关键部分
editUI.jsp关键部分
" width="100" height="100"/>
在这里需要注意的地方就是:在编辑页面(editUI.jsp),要注意用户头像显示,因此进行了的判断;同时,要注意将用户头像的地址使用隐藏起来,否则再次保存时会丢失原头像地址。
2、UserAction处理
2.1、添加Field和Propertyprivate File headImg;
private String headImgContentType;
private String headImgFileName;
public File getHeadImg() {
return headImg;
}
public void setHeadImg(File headImg) {
this.headImg = headImg;
}
public String getHeadImgContentType() {
return headImgContentType;
}
public void setHeadImgContentType(String headImgContentType) {
this.headImgContentType = headImgContentType;
}
public String getHeadImgFileName() {
return headImgFileName;
}
public void setHeadImgFileName(String headImgFileName) {
this.headImgFileName = headImgFileName;
}
2.2、修改add和edit方法//保存新增
public String add()
{
try {
if(user != null)
{
if(headImg != null)
{
//1、保存头像到upload/user
String filePath = ServletActionContext.getServletContext().getRealPath("upload/user/");
String fileName = UUID.randomUUID().toString().replaceAll("-", "") + headImgFileName.substring(headImgFileName.lastIndexOf("."));
FileUtils.copyFile(headImg, new File(filePath,fileName));
//2、设置用户头像路径
user.setHeadImg("user/" + fileName);
}
userService.save(user);
}
} catch (Exception e) {
e.printStackTrace();
}
return "list";
}
//保存编辑
public String edit()
{
try {
if(user != null)
{
if(headImg != null)
{
//1、保存头像到upload/user
String filePath = ServletActionContext.getServletContext().getRealPath("upload/user/");
String fileName = UUID.randomUUID().toString().replaceAll("-", "") + headImgFileName.substring(headImgFileName.lastIndexOf("."));
FileUtils.copyFile(headImg, new File(filePath,fileName));
//2、设置用户头像路径
user.setHeadImg("user/" + fileName);
}
userService.update(user);
}
} catch (Exception e) {
e.printStackTrace();
}
return "list";
}