package com.justsy.uploaddemo.util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
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.FileCleanerCleanup;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileCleaningTracker;
/**
* @author zhangh
* @version 1.1 1、修改不设置后缀名,提示不允许的后缀名bug 2、修改上传多文件是不上传文件,提示“the saveName length
* is not match the file size!!”
*
* v1.2 添加提取默认表单名作为文件名
*
* v1.3随机命名改为uuid方式 优化配置 优化参数传入
*
*
* v1.4去除setMaxSize(int maxSize)方法,该方法设置值无效
*
*/
public class FileUploadTools {
private HttpServletRequest request;
private List<FileItem> items; // 全部上传内容
private List<String> fields = new ArrayList<String>() ;
private Map<String, List<String>> params = new HashMap<String, List<String>>(); // 保存�?��参数
private Map<String, FileItem> files = new HashMap<String, FileItem>();
private int maxSize = 30 * 1024 * 1024; // 默认�?��文件体积
private String[] allowedExts = new String[] {};
private String saveDir = ""; // 文件存储路径
public FileUploadTools(HttpServletRequest request)
throws UnsupportedEncodingException, FileUploadException {
this(request, 30 * 1024 * 1024, request.getSession()
.getServletContext().getRealPath("/")
+ "temp", request.getSession().getServletContext()
.getRealPath("/")
+ "upload/");
}
public FileUploadTools(HttpServletRequest request,int maxSize)
throws UnsupportedEncodingException, FileUploadException {
this(request, maxSize, request.getSession()
.getServletContext().getRealPath("/")
+ "temp", request.getSession().getServletContext()
.getRealPath("/")
+ "upload/");
}
@SuppressWarnings("unchecked")
public FileUploadTools(HttpServletRequest request, int maxSize,
String tempDir, String saveDir) throws FileUploadException,
UnsupportedEncodingException {
this.saveDir = saveDir;
this.request = request;
// 创建临时文件删除程序
FileCleaningTracker fileCleaningTracker = FileCleanerCleanup.getFileCleaningTracker(request.getSession().getServletContext());
// 创建磁盘工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 创建临时上传文件夹
if (tempDir != null) {
File tempFile = new File(tempDir);
if (!tempFile.exists()) {
tempFile.mkdir();
}
factory.setRepository(tempFile);
}
// buffer
factory.setSizeThreshold(4096);
factory.setFileCleaningTracker(fileCleaningTracker);
ServletFileUpload upload = new ServletFileUpload(factory);
if (maxSize > 0) {
this.maxSize = maxSize;
}
// 设置最大上传体积
upload.setSizeMax(this.maxSize);
try {
// 解析上传request
this.items = upload.parseRequest(this.request);
this.init();
} catch (FileUploadException e) {
throw e ;
}
}
/**
* 解析请求,将表单输入域与文件域分开并存储在map中
*
* @param fileName
* @throws UnsupportedEncodingException
*/
private void init() throws UnsupportedEncodingException {
Iterator<FileItem> iter = this.items.iterator();
// 迭代每一个表单请求项
while (iter.hasNext()) {
FileItem item = iter.next();
fields.add(item.getFieldName()) ;
// 是否为表单域
if (item.isFormField()) {
// 取得输入项的名称
String name = item.getFieldName();// 取得表单域的名称name="xxx"
// 对应的值
String value = new String(item.getString().getBytes(
"ISO-8859-1"), "UTF-8");
// 存储所有表单项值
List<String> temp = null;
if (this.params.containsKey(name)) {
// 已存在就直接取值
temp = this.params.get(name);
} else {
// 不存在就创建数组
temp = new ArrayList<String>();
}
temp.add(value);
// 放入表单域中形式是 name-------value
this.params.put(name, temp);
} else {
String fieldName = item.getFieldName();
//System.out.println("fieldName:"+fieldName);
this.files.put(fieldName, item);
}
}
}
/**
* 取得单�?的表单域,如:type="text"
*
* @param name
* @return
*/
public String getParameter(String name) {
String ret = null;
List<String> list = this.params.get(name);
if (list != null) {
ret = list.get(0);
}
return ret;
}
/**
* 取得多�?的表单域,如:type="checkbox"
*
* @param name
* @return
*/
public String[] getParameterValues(String name) {
String[] ret = null;
List<String> list = this.params.get(name);
if (list != null) {
ret = list.toArray(new String[] {});
}
return ret;
}
/**
* 取得上传文件
*
* @return
*/
protected Map<String, FileItem> getUploadFiles() {
return this.files;
}
private void save(File saveFile, FileItem item) {
// 写入磁盘
InputStream input;
FileOutputStream fos;
int size = 0;
try {
input = item.getInputStream();
fos = new FileOutputStream(saveFile);
byte[] b = new byte[512];
while ((size = input.read(b)) != -1) {
fos.write(b, 0, size);
}
fos.close();
input.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 取得表单域作为输入内容
*
* @param saveDir
* @return
* @throws UnAllowedExtException
*/
public Map<String, UploadMsg> saveFileDefault()
throws UnAllowedExtException {
Set<String> keys = this.files.keySet();
String[] fieldNames = keys.toArray(new String[] {});
return this.saveFile(fieldNames);
}
/**
* 指定存储路径和储存名�? 储存名不用带后缀�?
*
* @param saveDir
* 指定存储路径
* @param saveName
* 指定存储文件的名称
* @return
* @throws Exception
*/
// public List<UploadMsg> saveFile(String[] saveName)
// throws UnAllowedExtException {
public Map<String, UploadMsg> saveFile(String[] saveName)
throws UnAllowedExtException {
// List<UploadMsg> msgs = new ArrayList<UploadMsg>();
Map<String, UploadMsg> msgs = new HashMap<String, FileUploadTools.UploadMsg>();
long size = 0;
// 创建存储目录
File saveDiretory = new File(saveDir);
if (!saveDiretory.exists()) {
saveDiretory.mkdir();
}
// System.out.println(this.files.size());
// 如果有输入文件表单项
if (this.files.size() > 0) {
// 上传文件后缀名
String ext;
// 取得文件表单项的名称
Set<String> keys = this.files.keySet();
// 迭代取出每个文件内容
Iterator<String> iter = keys.iterator();
// 用来创建进行存储的文件
File saveFile = null;
// 简单计数器,记录自己指定的名称
int i = 0;
boolean flag = true;
while (iter.hasNext()) {
String fieldName = iter.next();
FileItem item = this.files.get(fieldName);
String fileName = item.getName();
if ("".equals(fileName)) {
continue;
}
// 后缀名的判断
ext = fileName.substring(fileName.lastIndexOf(".") + 1)
没有合适的资源?快使用搜索试试~ 我知道了~
fileupload+uploadify上传demo
共33个文件
class:5个
java:4个
js:4个
5星 · 超过95%的资源 需积分: 9 129 下载量 172 浏览量
2012-03-23
13:31:08
上传
评论 2
收藏 306KB RAR 举报
温馨提示
改造uploadify的demo,使其搭配fileupload进行更好的上传,使用介绍 http://blog.csdn.net/akwolf/article/details/7382368
资源推荐
资源详情
资源评论
收起资源包目录
upload.rar (33个子文件)
upload
src
com
justsy
uploaddemo
util
UnAllowedExtException.java 243B
FileUploadTools.java 10KB
servlet
CheckServlet.java 731B
UploadServlet.java 2KB
.classpath 841B
build
classes
com
justsy
uploaddemo
util
FileUploadTools.class 10KB
FileUploadTools$UploadMsg.class 1KB
UnAllowedExtException.class 467B
servlet
UploadServlet.class 3KB
CheckServlet.class 1KB
.settings
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.common.project.facet.core.xml 345B
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.common.component 472B
.jsdtscope 503B
org.eclipse.jdt.core.prefs 395B
WebContent
META-INF
MANIFEST.MF 39B
uploadify
expressInstall.swf 727B
cancel.png 3KB
swfobject.js 10KB
jquery-1.4.2.min.js 71KB
jquery.uploadify.v2.1.4.js 15KB
uploadify.swf 22KB
uploadify.fla 92KB
jquery.uploadify.v2.1.4.min.js 8KB
uploadify.allglyphs.swf 36KB
uploadify.css 2KB
index.html 922B
WEB-INF
lib
commons-logging-1.1.1.jar 59KB
commons-fileupload-1.2.1.jar 56KB
commons-io-1.3.2.jar 86KB
web.xml 2KB
.project 1KB
共 33 条
- 1
akwolf
- 粉丝: 26
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页