📄 fileuploadmanager.java
字号:
package actions;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadManager {
/**
* 非文件域列表
*/
private Map formFieldsMap=new HashMap();
/**
* 文件域列表,原先设计根据文件域的name属性存放,后来遇到<input file>没有设name属性时发现有问题:后面的值
* 覆盖了前面的, 所以改成根据文件域的值存放,只要上传文件的值不相同能正常工作
*/
private Map fileFieldsMap=new HashMap();
/**
* 是否包含文件域
*/
private boolean isMultipart=false;
/**
*
* @return 是否包含文件域
* true 是
* false 否
*/
public boolean isMultipart() {
return isMultipart;
}
/**
*
* @param request 表单请求
* @param sizeMax 上传文件的最大字节(byte)
*/
public FileUploadManager(HttpServletRequest request,long sizeMax)
{
setRequest(request,sizeMax);
}
/**
* 设置 HttpServletRequest 并分析里面的表单数据.
* @param request 表单请求
* @param sizeMax 上传文件的最大字节(byte)
*/
public void setRequest(HttpServletRequest request,long sizeMax)
{
// this.request=request;
isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart)
{
// 创建DiskFileItemFactory
DiskFileItemFactory factory = new DiskFileItemFactory();
// 创建文件上传控制器
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("utf-8");
upload.setSizeMax(sizeMax);
try
{
List items = upload.parseRequest(request);
for(int i=0;i<items.size();i++)
{
FileItem item = (FileItem) items.get(i);
if (item.isFormField())
{
processFormField(item);
}
else
{
processUploadedFile(item);
}
}
}
catch (FileUploadException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 文件域处理
* @param item 上传文件对象
*/
private void processUploadedFile(FileItem item) {
// TODO Auto-generated method stub
// Process a file upload
if (!item.isFormField()&&item.getName()!="") {
String name=item.getName();
fileFieldsMap.put(name, item);
}
}
/**
* 非文件域处理
* @param item 非文件域对象
* @throws UnsupportedEncodingException
*/
private void processFormField(FileItem item) {
// TODO Auto-generated method stub
if (item.isFormField()) {
String name = item.getFieldName();
String value;
try {
value = item.getString("utf-8");
formFieldsMap.put(name, value);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 获取表单域的值
* @param formFieldName 表单域name
* @return 表单域的值
*/
public String getFormFieldValue(String formFieldName)
{
if(formFieldsMap.containsKey(formFieldName)&&isMultipart)
{
return (String)formFieldsMap.get(formFieldName);
}
{
return null;
}
}
/**
* 保存文件
* @param fieldName 文件域的值
* @param filePathName 文件保存路径,包括文件名,例如:"d://jsp.rar",文件保存在d盘下,名为jsp.rar
* @return 是否保存成功 true:成功 false:失败
*/
public boolean saveFileItem(String fieldName,String filePathName)
{
if(fileFieldsMap.containsKey(fieldName)&&isMultipart)
{
FileItem item=(FileItem) fileFieldsMap.get(fieldName);
File uploadedFile = new File(filePathName);
try {
item.write(uploadedFile);
return true;
} catch (Exception e) {
// TODO Auto-generated catch block
return false;
}
}
else
{
return false;
}
}
/**
* 保存所有文件
* @param path 文件保存目录,不包括文件名,如 "d://" 文件都保存在d盘下
* @return 是否成功
*/
public boolean saveAllFile(String path)
{
boolean ok=true;
if(isMultipart)
{
Collection values = fileFieldsMap.values();
Iterator iterator = values.iterator();
while(iterator.hasNext())
{
FileItem item=(FileItem) iterator.next();
String name = item.getName();//获取上传文件名,包括路径
name=name.substring(name.lastIndexOf("\\")+1); //从全路径中提取文件名
File file=new File(path, name);
try {
item.write(file);
} catch (Exception e) {
// TODO Auto-generated catch block
ok=false;
break;
}
}
}
else
{
ok=false;
}
return ok;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -