package com.vrv.ieas.action;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.StrutsConstants;
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;
import org.apache.struts2.dispatcher.multipart.MultiPartRequest;
import com.opensymphony.xwork2.inject.Inject;
import com.vrv.ieas.utils.FileOperatorUtil;
import org.apache.commons.fileupload.RequestContext;
import org.apache.commons.fileupload.disk.DiskFileItem;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Collections;
public class MyJakartaMultiPartRequest implements MultiPartRequest {
private long lastfileLen = 0L;
// maps parameter name -> List of FileItem objects
protected Map<String, List<FileItem>> files = new HashMap<String, List<FileItem>>();
// maps parameter name -> List of param values
protected Map<String, List<String>> params = new HashMap<String, List<String>>();
// any errors while processing this request
protected List<String> errors = new ArrayList<String>();
protected long maxSize = 100 * 1024 * 1024l; //in bytes = 100M
@Inject(StrutsConstants.STRUTS_MULTIPART_MAXSIZE)
public void setMaxSize(String maxSize) {
this.maxSize = Long.parseLong(maxSize);
}
/***
* parseRequest List<FileItem> 重写JakartaMultiPartRequest类,加入文件上传进度监听
* @author chenjun 2013-03-21
* @return
* @throws FileUploadException
*/
@SuppressWarnings("unchecked")
protected List<FileItem> parseRequest(HttpServletRequest request,
String saveDir) throws FileUploadException {
long st = System.currentTimeMillis();
String curProPath = request.getServletContext().getRealPath("");
String filePath = FileOperatorUtil.createScrrenManagerFolder(curProPath);
File file = new File(filePath);
if (!file.exists())
file.mkdirs();
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
// param sizeMax The maximum allowed size, in bytes. The default value of -1 indicates, that there is no limit.
upload.setFileSizeMax(-1L);
// Sets the maximum allowed size of a single uploaded file, in bytes
upload.setSizeMax(maxSize);
upload.setHeaderEncoding("UTF-8");
// 设置进度监听器
upload.setProgressListener(new FileListener(request));
try {
String fileName = null;
List<?> items = upload.parseRequest(request);
FileItem item = null;
for (int i = 0; i < items.size(); i++) {
item = (FileItem) items.get(i);
if( null != item.getName() && (!"".equals(item.getName())) ){
FileOperatorUtil.isDoubleFileNameAndNew(filePath,item.getName().trim());
fileName = filePath + item.getName().replaceAll(" ", "");
lastfileLen = item.getSize();//Byte
if (item.isInMemory()) {
// 处理小文件,数据直接放入内存中
item.write(new File(fileName));
} else {
// 保存文件
if (!item.isFormField() && item.getName().length() > 0) {
// item.write(new File(fileName));
((DiskFileItem) item).getStoreLocation().renameTo(new File(fileName));
}
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
long et = System.currentTimeMillis();
System.out.println("文件上传速度为:" + (Double.valueOf(lastfileLen)/(1024*1024))/(Double.valueOf(String.valueOf(et - st))/1000) + "兆/秒,即mb/s");
/** 本机测试80M兆/秒速度情况
* 文件上传速度为:113.34725895553785兆/秒,即mb/s
* 文件上传速度为:118.41494564505518兆/秒,即mb/s
* 文件上传速度为:117.71322744864004兆/秒,即mb/s
* 文件上传速度为:120.38852807247277兆/秒,即mb/s
* 文件上传速度为:118.76895146163233兆/秒,即mb/s
*/
return upload.parseRequest(createRequestContext(request));
}
public void parse(HttpServletRequest request, String saveDir)
throws IOException {
try {
processUpload(request, saveDir);
} catch (FileUploadException e) {
errors.add(e.getMessage());
}
}
private void processUpload(HttpServletRequest request, String saveDir)
throws FileUploadException, UnsupportedEncodingException {
for (FileItem item : parseRequest(request, saveDir)) {
if (item.isFormField()) {
processNormalFormField(item, request.getCharacterEncoding());
} else {
processFileField(item);
}
}
}
private void processFileField(FileItem item) {
// Skip file uploads that don't have a file name - meaning that no file
// was selected.
if (item.getName() == null || item.getName().trim().length() < 1) {
return;
}
List<FileItem> values;
if (files.get(item.getFieldName()) != null) {
values = files.get(item.getFieldName());
} else {
values = new ArrayList<FileItem>();
}
values.add(item);
files.put(item.getFieldName(), values);
}
private void processNormalFormField(FileItem item, String charset)
throws UnsupportedEncodingException {
List<String> values;
if (params.get(item.getFieldName()) != null) {
values = params.get(item.getFieldName());
} else {
values = new ArrayList<String>();
}
// note: see http://jira.opensymphony.com/browse/WW-633
// basically, in some cases the charset may be null, so
// we're just going to try to "other" method (no idea if this
// will work)
if (charset != null) {
values.add(item.getString(charset));
} else {
values.add(item.getString());
}
params.put(item.getFieldName(), values);
}
/*
* 重写此方法,加入上传进度的监听 private List<FileItem> parseRequest(HttpServletRequest
* servletRequest, String saveDir) throws FileUploadException {
* DiskFileItemFactory fac = createDiskFileItemFactory(saveDir);
* ServletFileUpload upload = new ServletFileUpload(fac);
* upload.setSizeMax(maxSize); return
* upload.parseRequest(createRequestContext(servletRequest)); }
*/
@SuppressWarnings("unused")
private DiskFileItemFactory createDiskFileItemFactory(String saveDir) {
DiskFileItemFactory fac = new DiskFileItemFactory();
// Make sure that the data is written to file
fac.setSizeThreshold(0);
if (saveDir != null) {
fac.setRepository(new File(saveDir));
}
return fac;
}
/**
* (non-Javadoc)
*
* @see org.apache.struts2.dispatcher.multipart.MultiPartRequest#getFileParameterNames()
*/
public Enumeration<String> getFileParameterNames() {
return Collections.enumeration(files.keySet());
}
/**
* (non-Javadoc)
*
* @see org.apache.struts2.dispatcher.multipart.MultiPartRequest#getContentType(java.lang.String)
*/
public String[] getContentType(String fieldName) {
List<FileItem> items = files.get(fieldName);
if (items == null) {
return null;
}
List<String> contentTypes = new ArrayList<String>(items.size());
for (FileItem fileItem : items) {
contentTypes.add(fileItem.getContentType());
}
return contentTypes.toArray(new String[contentTypes.size()]);
}
/**
* (non-Javadoc)
*
* @see org.apache.struts2.dispatcher.multipart.MultiPartRequest#getFile(java.lang.String)
*/
public File[] getFile(String fieldName) {
List<FileItem> items = files.get(fieldName);
if (items == null) {
return null;
}
List<File> fileList = new ArrayList<File>(items.size());
for (FileItem fileItem : items) {
fileList.add(((DiskFileItem) fileItem).getStoreLocation());
}
return fileList.toArray(new File[fileList.siz
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于eclipse + easyUi1.2.6+common-fileupload + struts2实现带进度条的文件上传DEMO,具体效果跟思路可见我的博客:http://blog.csdn.net/jun55xiu/article/details/22042279
资源推荐
资源详情
资源评论
收起资源包目录
easyUi+jquery+common-file-upload +struts2带进度条的文件上传DEMO (175个子文件)
MyJakartaMultiPartRequest.class 10KB
FileOperatorUtil.class 3KB
FileOperatorAction.class 2KB
MyJakartaMultiPartRequest$1.class 2KB
FileListener.class 1KB
.classpath 841B
org.eclipse.wst.common.component 494B
org.eclipse.wst.jsdt.ui.superType.container 49B
easyui.css 31KB
default.css 20KB
datagrid.css 4KB
tabs.css 4KB
tree.css 4KB
calendar.css 3KB
login.css 2KB
layout.css 2KB
panel.css 2KB
linkbutton.css 1KB
window.css 1KB
menu.css 1KB
icon.css 1KB
slider.css 1KB
searchbox.css 1KB
pagination.css 948B
jquery.loadmask.css 846B
splitbutton.css 799B
spinner.css 732B
messager.css 692B
combo.css 686B
validatebox.css 636B
accordion.css 591B
propertygrid.css 583B
datebox.css 527B
menubutton.css 464B
dialog.css 422B
progressbar.css 317B
combobox.css 186B
Thumbs.db 96KB
Thumbs.db 24KB
entries 2KB
button_span_bg.gif 2KB
tree_loading.gif 2KB
panel_loading.gif 2KB
pagination_loading.gif 2KB
messager_error.gif 2KB
messager_question.gif 2KB
messager_info.gif 2KB
messager_warning.gif 1KB
button_a_bg.gif 1KB
tree_folder_open.gif 956B
tree_folder.gif 952B
pagination_first.gif 925B
pagination_last.gif 923B
pagination_prev.gif 879B
pagination_next.gif 875B
menu.gif 834B
datagrid_sort_desc.gif 833B
datagrid_sort_asc.gif 830B
tabs_close.gif 829B
panel_tools.gif 737B
btnbigbg.gif 655B
btnbigbg_hover.gif 650B
tree_arrows.gif 617B
btnbg.gif 572B
btnbg_hover.gif 569B
layout_button_up.gif 247B
panel_tool_expand.gif 247B
layout_button_left.gif 247B
layout_button_down.gif 246B
layout_button_right.gif 246B
panel_tool_collapse.gif 246B
tree_checkbox_2.gif 181B
tree_checkbox_1.gif 174B
tree_checkbox_0.gif 168B
tree_file.gif 118B
datagrid_header_bg.gif 97B
datagrid_row_expand.gif 91B
validatebox_pointer.gif 82B
combo_arrow.gif 82B
datagrid_row_collapse.gif 80B
calendar_prevyear.gif 76B
calendar_nextyear.gif 75B
calendar_prevmonth.gif 66B
calendar_nextmonth.gif 64B
spinner_arrow_up.gif 53B
spinner_arrow_down.gif 53B
blank.gif 43B
blank.gif 43B
xwork-core-2.2.1.jar 997KB
freemarker-2.3.16.jar 860KB
struts2-core-2.2.1.jar 755KB
commons-collections-3.2.jar 558KB
javassist.jar 531KB
commons-lang-2.3.jar 240KB
ognl-3.0.jar 224KB
commons-beanutils-1.7.0.jar 184KB
json-lib-2.2.3-jdk13.jar 145KB
commons-io-1.3.2.jar 86KB
ezmorph-1.0.3.jar 76KB
commons-fileupload-1.2.1.jar 56KB
共 175 条
- 1
- 2
陈鋆
- 粉丝: 180
- 资源: 55
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页