📄 fileuploadbean.java
字号:
/*
* Created on 2007-4-8
* Last modified on 2007-4-8
* Powered by YeQiangWei.com
*/
package com.yeqiangwei.club.fileUpload;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
import com.yeqiangwei.club.util.MessageUtils;
import com.yeqiangwei.util.Validator;
public class FileUploadBean extends MessageUtils{
private static final Logger logger = Logger.getLogger(FileUploadBean.class);
private static final String separator = java.io.File.separator;
private FileUploadModel fileUploadModel;
protected HttpServletRequest g_request;
protected HttpServletResponse g_response;
protected ServletContext g_application;
public final void init(ServletConfig servletconfig) throws ServletException
{
g_application = servletconfig.getServletContext();
}
public void service(HttpServletRequest httpservletrequest,HttpServletResponse httpservletresponse)
throws ServletException,IOException
{
g_request = httpservletrequest;
g_response = httpservletresponse;
}
public final void initialize(ServletConfig servletconfig,HttpServletRequest httpservletrequest,HttpServletResponse httpservletresponse) throws ServletException
{
g_application = servletconfig.getServletContext();
g_request = httpservletrequest;
g_response = httpservletresponse;
}
public final void initialize(PageContext pagecontext) throws ServletException
{
g_application = pagecontext.getServletContext();
g_request = (HttpServletRequest)pagecontext.getRequest();
g_response = (HttpServletResponse)pagecontext.getResponse();
}
Map<String, String> formFields = new HashMap<String, String>();
public boolean saveFile(){
if(Validator.isEmpty(fileUploadModel)){
this.setMessage(MessageUtils.getMessage("error_notlogin"));
return false;
}
if(Validator.isEmpty(g_request)){
logger.error("request is null");
return false;
}
boolean bea = false;
ServletFileUpload upload = new ServletFileUpload(fileUploadModel.getDiskFileItemFactory());
long requestSize = g_request.getContentLength();
fileUploadModel.setFileSize(requestSize);
FileUploadTempModel temp = FileUploadTemp.getFileUploadTempModel(g_request);
temp.setFileSize(String.valueOf(requestSize));
FileUploadTemp.setFileUploadTempModel(g_request,temp);
/*
* 判断文件尺寸是否超过个人存储空间尺寸
* 判断单个文件尺寸是否超过指定的最大尺寸
*/
if(fileUploadModel.getMySpareSize()<fileUploadModel.getFileSize()
||fileUploadModel.getMaxSize()<fileUploadModel.getFileSize())
{
this.setMessage(MessageUtils.getMessage("error_fileupload_toobig"));
logger.debug("文件过大上传失败!");
logger.debug("个人空间:"+fileUploadModel.getMySpareSize());
logger.debug("最大上传:"+fileUploadModel.getMaxSize());
logger.debug("文件大小:"+fileUploadModel.getFileSize());
return false;
}
upload.setSizeMax(fileUploadModel.getMaxSize()); //设置允许用户上传文件大小,单位:字节,这里设为2m
upload.setFileSizeMax(fileUploadModel.getMaxSize()); //设置单个文件大小
//parseRequest是DiskFileUpload继承自FileUpoadBase的方法
//通过句柄解析请求,解析得到的项目保存在一个List中
try {
List<FileItem> fileItems = upload.parseRequest(g_request);
if(Validator.isEmpty(fileItems)){
this.setMessage(MessageUtils.getMessage("error"));
return false;
}
/*
* 通过循环依次获得List里面的文件项目。要区分表示
* 文件的项目和普通的表单输入项目,使用isFormField()方法。
* 根据处理请求的要求,我们可以保存上载的文件,
* 或者一个字节一个字节地处理文件内容,或者打开文件的输入流。
*/
Iterator<FileItem> iterator = fileItems.iterator();
//String regExp=".+"+separator+"(.+)$";
//Pattern pattern = Pattern.compile(regExp);
while (iterator.hasNext()) {
/**
* 进度读取
*/
fileUploadModel.setReadsBytes(upload.getReadsBytes());
FileItem item = iterator.next();
//提取其他不是文件域的表单信息存入Map表
if (item.isFormField()) {
formFields.put(item.getFieldName(),item.getString());
logger.debug("FormFields:"+formFields.get(item.getFieldName()));
logger.debug("FileItem size:"+item.getSize());
}else{
logger.debug("FileItem size:"+item.getSize());
fileUploadModel.setOriginalFileNameAndPath(item.getName()); //客户端电脑的文件存放路径及文件名
if(Validator.isEmpty(fileUploadModel.getFileName())){
this.setMessage(MessageUtils.getMessage("error_fileupload"));
return false;
}else{
//Matcher m = pattern.matcher(fileUploadModel.getOriginalFileNameAndPath());
//logger.debug("Matcher:"+m);
//logger.debug("p.matcher():"+fileUploadModel.getOriginalFileNameAndPath());
/*
if(Validator.isEmpty(m)){
this.setMessage(MessageUtils.getMessage("error"));
return false;
}
boolean result = m.find();
if(!result){
this.setMessage(MessageUtils.getMessage("error_fileUpload_noSelected"));
return false;
}
String originalName = m.group(1); //文件名
*/
boolean result = false;
if(!Validator.isEmpty(fileUploadModel.getOriginalFileNameAndPath())){
result = true;
}else{
this.setMessage(MessageUtils.getMessage("error_fileUpload_noSelected"));
return false;
}
int start = fileUploadModel.getOriginalFileNameAndPath().lastIndexOf(separator);
int end = fileUploadModel.getOriginalFileNameAndPath().length();
if(start<0){
start = 0;
}
String originalName = fileUploadModel.getOriginalFileNameAndPath().substring(start,end);
logger.debug("originalName:"+originalName);
int f = fileUploadModel.getOriginalFileNameAndPath().lastIndexOf('.') + 1;
String fileExt = fileUploadModel.getOriginalFileNameAndPath().substring(f
, fileUploadModel.getOriginalFileNameAndPath().length()).toLowerCase();//取得文件扩展名
fileUploadModel.setFileExt(fileExt);
String fileName = fileUploadModel.getFileName() + "." + fileUploadModel.getFileExt();
fileUploadModel.setFileName(fileName);
logger.debug("originalFileNameAndPath:"+fileUploadModel.getOriginalFileNameAndPath());
logger.debug("fileName:"+fileName);
if (result){
String allowedExt = fileUploadModel.getAllowedExt();
StringTokenizer st = new StringTokenizer(allowedExt, "|");
String[] ishave = new String[st.countTokens()];
boolean passType = false; //判断文件类型是否属于允许的上传类型
for(int i=0;st.hasMoreTokens();i++){
ishave[i]=st.nextToken().trim();
String oldFileName = fileUploadModel.getOriginalFileNameAndPath();
if (oldFileName.toLowerCase().endsWith(ishave[i])){
passType = true;
}
}
if(!passType){
this.setMessage(MessageUtils.getMessage("error_fileupload_noallowed"));
logger.debug(MessageUtils.getMessage("error_fileupload_noallowed"));
return false;
}else{
try{
logger.debug("save file:"+fileUploadModel.getFilePath()+fileName);
//保存上传的文件到指定的目录
item.write(new File(fileUploadModel.getFilePath()+fileName));
bea = true;
this.setMessage(MessageUtils.getMessage("success"));
}catch(Exception e1){
this.setMessage(e1.toString());
logger.error(e1.toString());
return false;
}
}
}else{
this.setMessage(MessageUtils.getMessage("error_fileupload"));
}
}
}
}
} catch (FileUploadException e) {
this.setMessage(e.toString());
logger.error(e.toString());
}
return bea;
}
public FileUploadModel getFileUploadModel() {
return fileUploadModel;
}
public void setFileUploadModel(FileUploadModel fileUploadModel) {
this.fileUploadModel = fileUploadModel;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -