⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileuploadservlet.java

📁 野蔷薇论坛源码 java 自己看看吧。 学习用
💻 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 + -