package com.job36.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.struts.upload.FormFile;
public class UploadFile {
/**
* 文件名后缀是否在字符数组里含有相同的
*
* @param file
* 要检查的文件
* @param suffixal
* 需要判断的文件后缀
* @return true:文件后缀<b>出现</b>在字符数组中 false:文件后缀<b>没有出现</b>在字符数组中
*/
public boolean checkFileSuffixal(FormFile file, String[] suffixal) {
boolean reBoolean = false;
String fileName = file.getFileName();
String fileNameSuff = "";
if (fileName.indexOf(".") > 0) {
fileNameSuff = fileName.substring(fileName.lastIndexOf(".") + 1)
.toLowerCase();
for (int i = 0; i < suffixal.length; i++) {
suffixal[i] = suffixal[i].toLowerCase();
if (fileNameSuff.equals(suffixal[i])) {
reBoolean = true;
break;
}
}
}
return reBoolean;
}
/**
* 检查文件大小 判断文件是否大于给定的数值
*
* @param file
* 要检查的文件
* @param size
* 文件大小判定值,以KB为单位计算
* @return true:文件大小<b>大于</b>给定大小;false:文件大小<b>小于等于</b>给定大小
*/
public boolean checkFileSize(FormFile file, int size) {
int fileSize = file.getFileSize();
size *= 1024;
if (fileSize > size)
return true;
return false;
}
/**
* 检查文件大小及后缀
*
* @param file
* 需要检查的文件
* @param suffixal
* 判断文件后缀数组
* @param size
* 判断文件大小
* @return true:文件后缀<b>出现</b>在字符数组中,大小<b>没有超过</b>指定大小;<br>
* false:文件后缀<b>没有出现</b>在字符数组中或者大小<b>超过</b>指定大小
*/
public boolean checkFile(FormFile file, String[] suffixal, int size) {
if (!checkFileSuffixal(file, suffixal))
return false;
if (checkFileSize(file, size))
return false;
return true;
}
public void writeFile(FormFile file, String filePath, String fleName) {
filePath = formatPath(filePath);//格式化文件夹字符串
makeDir(filePath);//新建文件夹
filePath = formatPath(filePath + fleName);//格式化文件夹名字和文件名字
File fileWrite = new File(filePath);
InputStream reader = null;
FileOutputStream writer = null;
try {
reader = file.getInputStream();
writer = new FileOutputStream(fileWrite);
byte[] buffer = new byte[8192];
int bytesRead = 0;
while ((bytesRead = reader.read(buffer, 0, 8192)) != -1) {
writer.write(buffer, 0, bytesRead);
}
writer.flush();
writer.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
writer.close();
reader.close();
} catch (IOException i) {
i.printStackTrace();
}
}
file.destroy();
}
public void deleteFile(String filePath, String fileName) {
String fileStr = formatPath(filePath, fileName);
deleteFile(fileStr);
}
public void deleteFile(String filePathName) {
if(null == filePathName || "".equals(filePathName))
return ;
File file = new File(filePathName);
try {
if (file.exists())
file.delete();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 新建文件夹
*
* @param path
* 要新建的文件夹路径
* @return true:文件夹存在或者新建成功;false:文件夹新建失败不存在
*/
private boolean makeDir(String path) {
path = formatPath(path);
File file = new File(path);
if (!file.exists()) {
return file.mkdirs();
}
return true;
}
/**
* 格式化文件路径及文件名
*
* @param filePath
* @param fileName
* @return 返回合法的文件路径及文件名
*/
private String formatPath(String filePath, String fileName) {
String reStr = "";
filePath = filePath.replaceAll("\\\\", "/");
int filePathLength = filePath.length();
if (filePathLength > 0
&& !filePath.substring(filePathLength - 1).equals("/"))
filePath += "/";
reStr = filePath + fileName;
return reStr;
}
/**
* 格式化文件路径
*
* @param filePath
* @return
*/
private String formatPath(String filePath) {
return formatPath(filePath, "");
}
}
package com.job36.blog.user.manager;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;
import com.job36.blog.user.dao.UserDao;
import com.job36.blog.user.form.UserHeadImgForm;
import com.job36.util.UploadFile;
public class UserHeadImgManager {
public void uploadFile(ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws IOException {
try {
UserHeadImgForm uff = (UserHeadImgForm) form;
FormFile filePic = uff.getFilePic();
String fileName = filePic.getFileName();// 文件名
String exteName = "";
if (fileName.indexOf(".") > 0) {
exteName = fileName.substring(fileName.lastIndexOf("."));// 扩展名
}
String filePath = request.getRealPath("/");// 文件保存根路径
String oldFilePath = filePath + uff.getOldFilePath();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String todayPath = sdf.format(new Date());
filePath += "imgs\\headImg\\" + todayPath + "\\";// 文件存放路径
String filePathName = "/imgs/headImg/" + todayPath + "/"
+ uff.getBlogId() + exteName;// 图片网络地址
String uploadLoad = saveHeadImg(filePic, filePath, uff.getBlogId()
+ exteName, oldFilePath);// 上传文件
// 保存文件到数据库
String sql = "update b_user set headImg='" + filePathName
+ "' where blogId=" + uff.getBlogId();
UserDao uDao = new UserDao();
uDao.editTable(sql);
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
if (null != uploadLoad) {
out.print("<script>alert('" + uploadLoad
+ "');window.history.go(-1);</script>");
} else {
out.print(reHtml(filePathName));
}
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 返回到页面的html代码,方便图片预览与删除
*
* @param filePathName
* 文件路径与地址
* @param fileName
* 文件名称
* @return
*/
private String reHtml(String filePathName) {
StringBuffer sb = new StringBuffer();
sb.append("<script>");
sb.append("opener.document.getElementById('headImg').innerHTML='';");
sb.append("opener.document.getElementById('headImg').innerHTML='");
sb.append("<img src=\"" + filePathName
+ "\" width=\"100\" height=\"100\"/>';");
sb.append("window.close();");
sb.append("</script>");
return sb.toString();
}
/**
* 保存文件
*
* @param cachetFile
* 要保存的文件
* @param filePath
* 文件保存路径
* @param fileName
* 文件名
* @return
*/
private String saveHeadImg(FormFile cachetFile, String filePath,
String fileName, String oldFilePath) {
String[] suff = { "gif", "jpg", "bmp", "jpeg" };
UploadFile uf = new UploadFile();
if (!uf.checkFileSuffixal(cachetFile, suff))
return "请选择gi|jpg|bmpf|jpeg图片文件上传!";
if (uf.checkFileSize(cachetFile, 500))
return "文件大小不可以超过500K";
try {
uf.deleteFile(oldFilePath);
uf.writeFile(cachetFile, filePath, fileName);
} catch (Exception e) {
e.printStackTrace();
return "保存头像出现异常!";
}
return null;
}
}