`
499490717
  • 浏览: 40518 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2导致使用common-fileupload上传文件失败

阅读更多

朋友使用common-fileupload框架开发文件上传功能时获取不到上传的文件数据,代码如下:

index.jsp

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=utf-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">
		<title>My JSP 'index.jsp' starting page</title>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
	</head>

	<body>
		<form action="pro.jsp" method="post" accept-charset="utf-8" enctype="multipart/form-data">
			文件:<input type="file" name="file" /><br/>
			参数:<input type="text" name="text" /><br/>
			<input type="submit" name="submit" value="提交">
		</form>
	</body>
</html>

 

 pro.jsp:

 

<%@ page language="java" import="java.util.*,java.io.*"
	pageEncoding="UTF-8" contentType="text/html; charset=utf-8"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.*"%>
<%
	DiskFileItemFactory factory=new DiskFileItemFactory();
	//设置上传工厂的限制
	factory.setSizeThreshold(1024*1024*20);
	factory.setRepository(new File(request.getRealPath("/")));
	//创建一个上传文件的ServletFileUpload对象
	ServletFileUpload upload=new ServletFileUpload(factory);
	//设置最大的上传限制
	upload.setSizeMax(1024*1024*20);
	//处理HTTP请求,items是所有的表单项
	List items=upload.parseRequest(request);
	for(Iterator it=items.iterator();it.hasNext();){
		FileItem item=(FileItem)it.next();
		if(item.isFormField()){
			String name=item.getFieldName();
			String value=item.getString("utf-8");
			out.println("key:value-->"+name+"="+value+"<br/>");
		}
		else{
			//取得文件域的表单域名
			String fieldName=item.getFieldName();
			//取得文件名
			String fileName=item.getName();
			String contentType=item.getContentType();
			//以当前时间生成上传文件的文件名
			FileOutputStream fos=new FileOutputStream(request.getRealPath("/")+
System.currentTimeMillis()+fileName.substring(fileName.lastIndexOf(".",fileName.length())));
			if(item.isInMemory())
				fos.write(item.get());
			else{
				InputStream is = item.getInputStream();
				byte[] buffer=new byte[1024];
				int len;
				//读取上传文件的内容,并将其写入服务器的文件中
				while((len=is.read(buffer))>0)
					fos.write(buffer,0,len);
				is.close();
				fos.close();
			}
		}
	}
%>

 

将其代码拷贝到本地测试,竟然上传成功,刚想和朋友开玩笑说是RP问题时,突然想到在struts2的核心拦截器org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter中会对request进一步的封装以便struts2对request进行更多的操作(其实调用的是org.apache.struts2.dispatcher.Dispatcher类的wrapRequest方法),然后便将struts2加入到代码中测试,得到的结果和朋友的一样。具体是struts2对request进行了什么样的操作导致了这个问题笔者尚未研究,暂且在这里记录一下吧~~

但如果既用common-fileupload进行文件上传,又使用struts2进行开发,有没有办法解决以上的问题呢?当然有,只要在struts2的配置文件中加入一个名为“struts.action.excludePattern”的变量,并将其值设置为“/pro.jsp”即可。如果有多个路径,使用逗号分割。

 

 

版权所有,转载请标明出处:http://blogwarning.iteye.com/blog/1384953

分享到:
评论

相关推荐

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

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

    两篇网文:拦截器 Common-FileUpload

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

    Common-FileUpload与struts2文件上传

    总结一下,Apache Commons FileUpload和Struts2框架提供了完善的文件上传解决方案。开发者可以通过Struts2的配置和Action类设计,结合Commons FileUpload的多部分解析能力,实现高效且安全的文件上传功能。同时,...

    Common-FileUpload带进度条文件上传

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

    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请求中的文件上传功能。这两个库为开发者提供了便捷、高效...

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

    通过上述步骤,你可以在Struts 2应用中成功实现文件上传功能,利用Commons FileUpload库的强大功能来处理上传的文件。以上内容涵盖了从创建上传表单到处理上传请求、验证和存储文件的关键知识点。希望这些信息能对你...

    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实现文件上传

    `common-fileupload`处理文件上传,而`common-io`则提供了文件I/O操作的支持。 导入库后,我们可以通过以下步骤实现文件上传: 1. **创建DiskFileItemFactory实例**: `DiskFileItemFactory factory = new ...

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

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

    common fileupload上传组件包

    "Common Fileupload上传组件包"是一个专用于处理Web应用程序中文件上传功能的工具包。这个包包含两个核心组件:`commons-io-1.4.jar`和`commons-fileupload-1.2.1.jar`。这两个组件在实现文件上传过程中扮演着至关...

Global site tag (gtag.js) - Google Analytics