`
z276356445t
  • 浏览: 152305 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Struts2下使用common-fileupload出现问题

 
阅读更多
/**
	 * 学生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中的上传请求.哎,真是悲剧
1
1
分享到:
评论
1 楼 Java_zhou 2011-11-15  
说的不清不楚,谁知道发生什么事情了,至少异常总得发一下吧....

相关推荐

    两篇网文:拦截器 Common-FileUpload

    在Struts2框架中结合使用拦截器和Common-FileUpload,可以创建一个安全且高效的文件上传系统。例如,你可以创建一个拦截器来验证上传文件的大小,防止过大文件导致服务器资源耗尽。同时,你还可以在Action中利用...

    利用Common-fileupload封装的文件上传组件...附上源码.

    此外,`Common-fileupload`与Servlet API紧密集成,使得它易于与其他Java Web框架如Spring、Struts等结合使用。 为了实现文件上传,你需要创建一个Servlet或者控制器,配置MultipartConfigElement以指定临时文件...

    Common-FileUpload与struts2文件上传

    在Java Web开发中,我们经常会用到Apache Commons FileUpload库与Struts2框架来实现这一功能。这两者结合可以提供稳定且灵活的文件上传解决方案。下面将详细介绍这两个工具在文件上传中的应用及其相关知识点。 ...

    commons-fileupload-1.3.3.jar和commons-io-2.6.jar

    在Java开发中,上传文件是一项常见的任务,而`commons-fileupload-1.3.3.jar`和`commons-io-2.6.jar`是Apache Commons项目中的两个重要库,专门用于处理HTTP请求中的文件上传功能。这两个库为开发者提供了便捷、高效...

    Common-FileUpload带进度条文件上传

    "Common-FileUpload带进度条文件上传"是一个专门处理这种需求的解决方案,它允许用户在上传文件时看到进度条,提供更好的用户体验。下面我们将详细探讨这个主题以及相关知识点。 1. 文件上传的基本原理:在Web开发...

    struts中使用Common-fileUpload.的几篇网络文章

    在Struts 2中,可以使用`&lt;s:form&gt;`标签的`enctype="multipart/form-data"`属性创建一个文件上传表单。然后,定义一个Action类,该类需要继承`org.apache.struts2.upload.FileUploadAction`或实现`...

    dom4j、common-fileupload、hibernate、jdom、log4j、proxool、spring、struts、webwork等工具、框架源码

    2. **Common-FileUpload**: 这是Apache Commons的一个模块,用于处理HTTP协议中的多部分文件上传请求。它简化了在Web应用程序中接收和处理大文件上传的过程,支持分块上传和错误处理。 3. **Hibernate**: Hibernate...

    easyUi+jquery+common-file-upload +struts2带进度条的文件上传DEMO

    基于eclipse + easyUi1.2.6+common-fileupload + struts2实现带进度条的文件上传DEMO,具体效果跟思路可见我的博客:http://blog.csdn.net/jun55xiu/article/details/22042279

    java使用common-fileupload实现文件上传

    这两个库可以从Apache官方网站下载,或者如果你使用的是Struts框架,它们通常已经在`lib`目录下提供。`common-fileupload`处理文件上传,而`common-io`则提供了文件I/O操作的支持。 导入库后,我们可以通过以下步骤...

    struts2 漏洞 "cve-2017-5638" 研究文档

    ### Struts2 CVE-2017-5638 漏洞研究文档 #### 漏洞概述 近日,安恒信息安全研究院WEBIN实验室的高级安全研究员nike.zheng发现...对于使用Struts2的企业和个人而言,及时更新框架版本和采取有效的安全措施至关重要。

Global site tag (gtag.js) - Google Analytics