一、界面配置
·建议上传100×100大小的图片,只支持jpg,jpeg,gif,bmp格式的图片,图片大小不能超过300K
<%
String curHead =CONTEXT+"/images/common/csw_toux.gif";
if(bean != null && !StringUtil.isEmpty(bean.getHeadImage())){
curHead = bean.getHeadImage();
if(curHead.indexOf("usercenter/headImg") != -1){
curHead = CONTEXT +"/" + curHead;
}else{
curHead = arequest.getImage(curHead);
}
}
%>
<%-- --%>
<%--
--%>
二、form配置
在项目中新建一个ActionForm的子类,如命名为:FileUploadForm.java,在其中新增一个FormFile类型的属性uploadFile,并设置getter、setter方法。
在Struts中,一个FormFile类型的对象对应Form表单中创送的一个文件,Struts将上传的文件信息封装金FormFile中,通过FormFile提供的方法可以方便的进行文件的操作。其实FormFile是一个接口,位于 org.apache.struts.upload.FormFile 中,它定义了操作上传文件的基本方法。
FormFile接口定义的常用方法:
(1) getFileName()/setFileName() //用于获取或设置文件名;
(2) getFileSize() / setFileSize() //用于获取或设置文件字节数;
(3) getFileData() //用于获取文件的字节数组,用于小的文件;
(4) getInputStream() //用于获取文件的输入流,用于较大的文件;
(5) destory() //销毁FromFile;
private FormFile headImageData;
public FormFile getHeadImageData() {
return headImageData;
}
public void setHeadImageData(FormFile headImageData) {
this.headImageData = headImageData;
}
三、aciton
在代码中可以看到,我们从FileUploadForm中找到了FormFile类型的属性,通过其提供的方法得到文件的信息,并将其存入服务器的磁盘中。在保存的过程中需要用到文件流的一些基本操作。
// 获得上传文件
FormFile headImage = uform.getHeadImageData();
// 调用service进行更新
IWebUserService service = new WebUserService();
bean = service.updateUserImage(request, headImage, user.getId(),
contextPath, shopResource);
/**
* 会员中心,上传头像
*/
public User updateUserImage(HttpServletRequest request, FormFile headImage,
String userId, String contextPath, ResourceBundle shopResource)
throws ServiceException {
// 用户ID是否为空
if (StringUtil.isEmpty(userId)) {
throw new ServiceException("no_user");
}
// 判断用户是否为空
User bean = this.getUserById(userId);
if (bean == null) {
throw new ServiceException("no_user");
}
// 判断上传文件是否存在
if (headImage == null) {
throw new ServiceException("no_file");
}
// 判断图片是否太大
int fileSize = headImage.getFileSize() / 1024;
if (fileSize > 300) {
throw new ServiceException("file_large");
}
// 生成新的文件
String fileName = "";
try {
fileName = ImageHelper.updateAdElement(request, headImage, "",
"headimg", shopResource, ProductHelper.PRODUCTFILE_ROOT);
} catch (Exception ex) {
throw new ServiceException("fileName_gen_error");
}
// 图片上传路径
String imageRootPath = shopResource
.getString(ProductHelper.PRODUCTFILE_ROOT);
String piccurl = contextPath;
UserBO bo = new UserBO();
// 删除老的图片
if (headImage != null && headImage.getFileSize() > 0) {
if (!StringUtil.isEmpty(bean.getHeadImage())
&& bean.getHeadImage().indexOf(imageRootPath) != -1
&& !StringUtil.isEmpty(fileName)) {
String picurl = bean.getHeadImage();
if (bean.getHeadImage().indexOf("http") != -1) {
picurl = bean.getHeadImage().substring(piccurl.length(),
bean.getHeadImage().length());
FileUtil.deleteFile(request.getRealPath(picurl));
} else {
FileUtil.deleteFile(request.getRealPath(picurl));
}
}
// if (fileName.indexOf("http") == -1) {
// bean.setHeadImage(piccurl + "/" + fileName);
// } else {
bean.setHeadImage(fileName);
// }
try {
bo.updateBean(bean);
} catch (Exception ex) {
throw new ServiceException("update_error");
}
} else {
String systemHeadImage = request.getParameter("systemHeadImage");
// 判断是否符合格式
if (!StringUtil.isEmpty(systemHeadImage)) {
boolean isbig = FileUtil.checkFileExtName(systemHeadImage);
if (!isbig) {
throw new ServiceException("prefix_no_fit");
}
}
if (!StringUtil.isEmpty(bean.getHeadImage())
&& bean.getHeadImage().indexOf(imageRootPath) != -1
&& !systemHeadImage.equals(bean.getHeadImage())) {
String picurl = bean.getHeadImage();
// if (StringUtil.isEmpty(fileName)
// && bean.getHeadImage().indexOf("http") == 0) {
if (StringUtil.isEmpty(fileName)) {
if (bean.getHeadImage().indexOf("http") != -1) {
picurl = bean.getHeadImage().substring(
piccurl.length(), bean.getHeadImage().length());
FileUtil.deleteFile(request.getRealPath(picurl));
} else {
FileUtil.deleteFile(request.getRealPath(picurl));
}
}
}
if (!systemHeadImage.equals(bean.getHeadImage())) {
bean.setHeadImage(systemHeadImage.substring(
systemHeadImage.indexOf("usercenter/headImg"),
systemHeadImage.length()));
try {
bo.updateBean(bean);
} catch (Exception ex) {
throw new ServiceException("update_error");
}
}
}
return bean;
}
文件保存
public static String updateImageFileByRelPath(String rootPath,
String oldFile, FormFile formFile) {
// 上传中图片
if (formFile != null && formFile.getFileSize() > 0) {
// String root = request.getRealPath("/upload/");
String fileName = DateUtil.getSysDateLong() + "."
+ FileUtil.getFileExtName(formFile.getFileName());
File rootFolder = new File(rootPath);
if (!rootFolder.exists()) {
rootFolder.mkdir();
}
FileOutputStream fos = null;
try {
// if(!rootPath.startsWith("/")) {
// rootPath = "/" + rootPath;
// }
if (!rootPath.endsWith("/")) {
rootPath = rootPath + "/";
}
fos = new FileOutputStream(rootPath + fileName);
fos.write(formFile.getFileData());
fos.flush();
if (oldFile != null && oldFile.length() > 0) {
File file = new File(oldFile);
if (file.exists()) {
file.delete();
}
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
return fileName;
}
return null;
}