📄 fileuploadservlet.java
字号:
/*
* Created on 2007-4-10
* Last modified on 2007-8-22
* Powered by YeQiangWei.com
*/
package com.yeqiangwei.club.fileUpload;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import com.yeqiangwei.club.exception.ClubException;
import com.yeqiangwei.club.service.ServiceLocator;
import com.yeqiangwei.club.service.ServiceWrapper;
import com.yeqiangwei.club.service.model.BasicInfoModel;
import com.yeqiangwei.club.service.model.UserModel;
import com.yeqiangwei.club.service.search.Constants;
import com.yeqiangwei.club.service.user.UserLogin;
import com.yeqiangwei.club.service.user.UserService;
import com.yeqiangwei.club.service.util.BasicInfoService;
import com.yeqiangwei.club.util.MessageUtils;
import com.yeqiangwei.image.ImageFactory;
import com.yeqiangwei.image.ImageOperate;
import com.yeqiangwei.io.File;
import com.yeqiangwei.util.FormatDateTime;
import com.yeqiangwei.util.ParamUtils;
import com.yeqiangwei.util.Validator;
public class FileUploadServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger(FileUploadServlet.class);
public void removeSession(HttpServletRequest request){
/*
* 改造需要把Session组装成一个对象来操作
*/
FileUploadTemp.remove(request);
}
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException
{
response.setContentType("text/HTML;charset=UTF-8");
PrintWriter out = response.getWriter();
if(ParamUtils.getStringParameter(request,"act","").equals("inital")){
logger.debug("销毁上传进度对象!");
this.removeSession(request);
}else{
FileUploadTempModel m = FileUploadTemp.getFileUploadTempModel(request);
StringBuffer sb = new StringBuffer();
sb.append("{\"fileSize\":");
sb.append(m.getFileSize());
sb.append(",\"readSize\":");
sb.append(m.getReadSize());
sb.append(",\"fileExt\":\"");
sb.append(m.getFileExt());
sb.append("\"");
sb.append(",\"url\":\"");
sb.append(m.getUrl());
sb.append("\"");
sb.append(",\"fileUploadId\":");
sb.append(m.getFileUploadId());
sb.append(",\"originalFileName\":\"");
sb.append(m.getOriginalFileName());
sb.append("\"");
sb.append("}");
logger.debug(sb.toString());
out.print(sb.toString());
}
out.close();
}
private void watermark(HttpServletRequest request, FileUploadModel fileUploadModel){
String ext = fileUploadModel.getFileExt().toLowerCase();
ImageOperate image = null;
if(ext.equals("gif")){
//image = ImageFactory.creator(ImageOperate.GIF);
}else if(ext.equals("jpg")
|| ext.equals("jpeg")
|| ext.equals("bmp")
|| ext.equals("png")
){
image = ImageFactory.creator(ImageOperate.JPEG);
}
if(image!=null){
String fpath = fileUploadModel.getFilePath()+fileUploadModel.getFileName();
StringBuffer wpath = new StringBuffer();
wpath.append(ParamUtils.getRealPath(request));
wpath.append("fileUpload");
wpath.append(java.io.File.separator);
wpath.append("yeqiangwei.png");
logger.debug("源图片地址:"+fpath);
logger.debug("水印图片地址:"+wpath);
boolean bea = image.watermark(fpath,fpath,wpath.toString());
if(!bea){
logger.debug("水印图生成失败!");
}
}
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/HTML;charset=UTF-8");
PrintWriter out = response.getWriter();
int userId = UserLogin.getUserId(request);
UserModel user = this.getUserService().findById(userId);
ParamUtils.getStringParameter(request,"act");
FileUploadBean fileUploadBean = new FileUploadBean();
FileUploadModel fileUploadModel = this.initialize(request);
boolean bea = false;
if(!Validator.isEmpty(user)){
fileUploadBean.service(request,response);
fileUploadBean.setFileUploadModel(fileUploadModel);
bea = fileUploadBean.saveFile(); //上传成功
if(bea){
this.watermark(request, fileUploadModel);
fileUploadModel = fileUploadBean.getFileUploadModel();
try {
this.getFileUploadService().create(fileUploadModel);
} catch (ClubException e) {
logger.error(e.toString());
}
}
request.setAttribute("message",fileUploadBean.getMessage());
}else{
fileUploadBean.setMessage(MessageUtils.getMessage("error_notlogin"));
}
/**
* 附件访问路径
*/
StringBuffer sb = new StringBuffer();
sb.append("<script type=\"text/javascript\">");
if(!bea){
this.removeSession(request);
sb.append("parent.f.error(\"");
sb.append(fileUploadBean.getMessage().replace("\"","\\\""));
sb.append("\");");
}else{
/**/
FileUploadTempModel temp = FileUploadTemp.getFileUploadTempModel(request);
temp.setFileExt(fileUploadModel.getFileExt());
temp.setUrl(fileUploadModel.getUrl()+fileUploadModel.getRelativeFilePath()+fileUploadModel.getFileName());
temp.setFileUploadId(fileUploadModel.getFileUploadId());
temp.setOriginalFileName(fileUploadModel.getOriginalFileNameAndPath());
FileUploadTemp.setFileUploadTempModel(request,temp);
logger.debug("用户的使用空间为:"+user.getFileUploadUseSize());
user.setFileUploadUseSize(user.getFileUploadUseSize()+fileUploadModel.getFileSize());
try {
this.getUserService().update(user,false);
ParamUtils.setSession(request,"User",user); //更新用户登录
} catch (ClubException e) {
logger.error(e.toString());
}
//logger.debug(this.getUserService().getMessage());
logger.debug("更新用户的使用空间为:"+user.getFileUploadUseSize());
/**/
sb.append("parent.document.getElementById(\"body\").innerHTML=\"");
sb.append(fileUploadBean.getMessage().replace("\"","\\\""));
sb.append("\";\r\n");
}
sb.append("</script>");
out.println(sb.toString());
out.close();
}
public FileUploadModel initialize(HttpServletRequest request){
BasicInfoModel basicInfoModel = this.getBasicInfoService().findOnly();
//String realpath = ParamUtils.getRealPath(request);
//if(!realpath.endsWith(java.io.File.separator)){
//realpath = realpath + java.io.File.separator;
//}
String month = FormatDateTime.formatDateTime("yyyyMM");
StringBuffer repositorypath = new StringBuffer(); //大文件临时存放路径
StringBuffer filepath = new StringBuffer(); //文件真实存放路径
StringBuffer relativepath = new StringBuffer(); //虚拟路径
filepath.append(Constants.REAL_PATH);
filepath.append("fileupload");
filepath.append(java.io.File.separator);
repositorypath.append(filepath);
repositorypath.append(java.io.File.separator);
repositorypath.append("temp");
if(File.createFolder(repositorypath.toString())==null){
logger.error("目录创建失败:"+filepath.toString());
}else{
repositorypath.append(java.io.File.separator);
}
filepath.append("club");
filepath.append(java.io.File.separator);
filepath.append("f");
filepath.append(ParamUtils.getStringParameter(request,"forumId","0"));
if(File.createFolder(filepath.toString())==null){
logger.error("目录创建失败:"+filepath.toString());
}else{
filepath.append(java.io.File.separator);
}
filepath.append(month);
if(File.createFolder(filepath.toString())==null){
logger.error("目录创建失败:"+filepath.toString());
}else{
filepath.append(java.io.File.separator);
}
relativepath.append("/club/f");
relativepath.append(ParamUtils.getStringParameter(request,"forumId","0"));
relativepath.append("/");
relativepath.append(month);
relativepath.append("/");
FileUploadModel fileUpload = new FileUploadModel();
fileUpload.setUrl(this.getBasicInfoService().findOnly().getFileUploadDomain());
fileUpload.setAllowedExt(basicInfoModel.getFileUploadAllowedExt()); //允许上传的文件类型
fileUpload.setFilePath(filepath.toString());
fileUpload.setRepositoryPath(repositorypath.toString()); //临时存储空间
fileUpload.setRelativeFilePath(relativepath.toString());
fileUpload.setMaxSize(basicInfoModel.getFileUploadMaxSize()); //最大上传单个尺寸
int userId = UserLogin.getUserId(request);
logger.debug("userId:"+userId);
UserModel user = this.getUserService().findById(userId);
if(!Validator.isEmpty(user)){
fileUpload.setUserId(user.getUserId());
fileUpload.setUserName(user.getUserName());
fileUpload.setUserIp(request.getRemoteAddr());
fileUpload.setCreateDateTime(FormatDateTime.now());
fileUpload.setTopicId(ParamUtils.getIntParameter(request,"topicId",0));
fileUpload.setReplyId(ParamUtils.getIntParameter(request,"replyId",0));
long spareSize = user.getFileUploadMaxSize() - user.getFileUploadUseSize();
logger.debug("user.getFileUploadMaxSize():"+user.getFileUploadMaxSize());
logger.debug("user.getFileUploadUseSize():"+user.getFileUploadUseSize());
fileUpload.setMySpareSize(spareSize); //个人上传空间的剩余容量
StringBuffer newname = new StringBuffer();
newname.append(basicInfoModel.getUrl().replace("http://",""));
newname.append("_");
newname.append(FormatDateTime.formatDateTime("yyyyMMddHHmmss"));
newname.append("_");
newname.append(user.getUserId());
fileUpload.setFileName(newname.toString());
}
return fileUpload;
}
public BasicInfoService getBasicInfoService() {
return ServiceWrapper.<BasicInfoService>getSingletonInstance(ServiceLocator.BASICINFO);
}
public FileUploadService getFileUploadService() {
return ServiceWrapper.<FileUploadService>getSingletonInstance(ServiceLocator.FILEUPLOAD);
}
public UserService getUserService() {
return ServiceWrapper.<UserService>getSingletonInstance(ServiceLocator.USER);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -