/**
* 学生Excel上传
*
* @param req
* 请求
* @param allowFileTypes
* 允许的文件类型
* @return
* @throws Exception
* 1.请求是否为上传类型 2.是否为允许的文件格式 3.上传大小限制 4.上传目录创建是否成功
*/
@SuppressWarnings("unchecked")
public List<String> uploadExcelByStu(HttpServletRequest req, final String[] allowFileTypes) throws Exception {
List<String> filePaths = new ArrayList<String>();
String basePath = req.getRealPath("");
if (!ServletFileUpload.isMultipartContent(req)) {
throw new FileUploadException("请检查请求格式,该请求不为上传请求.");
}
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置缓冲区大小
factory.setSizeThreshold(FILE_BUFFER_SIZE);
ServletFileUpload upload = new ServletFileUpload(factory);
System.out.println(req.getParameter("class_id"));
upload.setSizeMax(FILE_SIZE_MAX);
// 得到所有的文件
List<FileItem> items = upload.parseRequest(req);//解析这里的时候总是为空
Iterator<FileItem> it = items.iterator();
// 迭代处理每个文件
while (it.hasNext()) {
FileItem item = (FileItem) it.next();
// 获得文件名,包括路径
String fileName = item.getName();
String fileSuffixName = getFileSuffixName(fileName);
if (!inArray(allowFileTypes, fileSuffixName)) {
throw new FileUploadException("不支持该格式的文件,请选择" + allowFileTypes + "格式的文件!");
}
if (item.getSize() > FILE_SIZE_MAX) {
throw new FileUploadBase.FileSizeLimitExceededException("上传文件大小不得超过20M!", item.getSize(), FILE_SIZE_MAX);
}
if (fileName != null) {
// 根据当前时间生成新的文件名
String newFileName = MseTools.getDateYYYYMMDDHHMMSS() + "." + fileSuffixName;
String savedPath = basePath + FILE_REAL_PATH + "./" + newFileName;
File fullFile = new File(savedPath);
if (fullFile.mkdirs()) {
throw new FileNotFoundException("无法找到指定目录.");
} else {
item.write(fullFile);
filePaths.add(fullFile.getPath());
}
}
}
return filePaths;
}
/**
* 根据文件名,取得其后缀名
*
* @param fileName
* @return e.g : test.java return java
*/
public static String getFileSuffixName(String fileName) throws IndexOutOfBoundsException {
String suffixName = "";
try {
suffixName = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
} catch (Exception e) {
throw new IndexOutOfBoundsException("该文件的格式不正确,请检查其扩展名.");
}
return suffixName;
}
public static boolean inArray(String[] args, String target) {
for (String str : args) {
if (str.equals(target) || str == target) {
return true;
}
}
return false;
}
有谁遇到过.
程序运行到List<FileItem> items = upload.parseRequest(req);//解析这里的时候总是为空
看下有什么问题,items.size()=0
经检查发现,原来是struts2将request封装成了MultiRequestWrapper,所以无法解析出request中的上传请求.哎,真是悲剧
分享到:
相关推荐
在Struts2框架中结合使用拦截器和Common-FileUpload,可以创建一个安全且高效的文件上传系统。例如,你可以创建一个拦截器来验证上传文件的大小,防止过大文件导致服务器资源耗尽。同时,你还可以在Action中利用...
此外,`Common-fileupload`与Servlet API紧密集成,使得它易于与其他Java Web框架如Spring、Struts等结合使用。 为了实现文件上传,你需要创建一个Servlet或者控制器,配置MultipartConfigElement以指定临时文件...
在Java Web开发中,我们经常会用到Apache Commons FileUpload库与Struts2框架来实现这一功能。这两者结合可以提供稳定且灵活的文件上传解决方案。下面将详细介绍这两个工具在文件上传中的应用及其相关知识点。 ...
在Java开发中,上传文件是一项常见的任务,而`commons-fileupload-1.3.3.jar`和`commons-io-2.6.jar`是Apache Commons项目中的两个重要库,专门用于处理HTTP请求中的文件上传功能。这两个库为开发者提供了便捷、高效...
"Common-FileUpload带进度条文件上传"是一个专门处理这种需求的解决方案,它允许用户在上传文件时看到进度条,提供更好的用户体验。下面我们将详细探讨这个主题以及相关知识点。 1. 文件上传的基本原理:在Web开发...
在Struts 2中,可以使用`<s:form>`标签的`enctype="multipart/form-data"`属性创建一个文件上传表单。然后,定义一个Action类,该类需要继承`org.apache.struts2.upload.FileUploadAction`或实现`...
2. **Common-FileUpload**: 这是Apache Commons的一个模块,用于处理HTTP协议中的多部分文件上传请求。它简化了在Web应用程序中接收和处理大文件上传的过程,支持分块上传和错误处理。 3. **Hibernate**: Hibernate...
基于eclipse + easyUi1.2.6+common-fileupload + struts2实现带进度条的文件上传DEMO,具体效果跟思路可见我的博客:http://blog.csdn.net/jun55xiu/article/details/22042279
这两个库可以从Apache官方网站下载,或者如果你使用的是Struts框架,它们通常已经在`lib`目录下提供。`common-fileupload`处理文件上传,而`common-io`则提供了文件I/O操作的支持。 导入库后,我们可以通过以下步骤...
### Struts2 CVE-2017-5638 漏洞研究文档 #### 漏洞概述 近日,安恒信息安全研究院WEBIN实验室的高级安全研究员nike.zheng发现...对于使用Struts2的企业和个人而言,及时更新框架版本和采取有效的安全措施至关重要。