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

最近写测试struts2上传文件发现的问题

阅读更多
最近在写测试 struts2 上传的时候发现个问题 。不知道你们谁有过相同的问题 。我的环境为 jdk1.5,tomcat6.10 。发现的问题就是我在上传多个问题的时候。第一次会失败,发现是没得到我的file对象。发现是没生成临时文件的缘故。点ie的 回退到上传页面(这个时候没刷新)  然后再上传。这样就会成功,这个时候的的临时文件被删除了的。。如果刷新了jsp页面的话 。就会提示空指针异常。我也试图写一个类型转换器 在操作file的时候就去判断file对象的问题。。发现表单的enctype="multipart/form-data"  而我写的 Converter 就没进去起作用了 。付上我的代码。大家研究下。
<%@ page language="java" contentType="text/html; charset=gbk"
    pageEncoding="gbk"%>
    
<%@ taglib prefix="s" uri="/struts-tags" %>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>Insert title here</title>

<script type="text/javascript">

function addMore()
{
	var td = document.getElementById("more");
	
	var br = document.createElement("br");
	var input = document.createElement("input");
	var button = document.createElement("input");
	
	input.type = "file";
	input.name = "file";
	
	button.type = "button";
	button.value = "Remove";
	
	button.onclick = function()
	{
		td.removeChild(br);
		td.removeChild(input);
		td.removeChild(button);
	}
	
	td.appendChild(br);
	td.appendChild(input);
	td.appendChild(button);
	
}

</script>

</head>

<body>

	<table align="center" width="50%">
			<tr>
				<td>

					<s:fielderror cssStyle="color:red" />

				</td>
			</tr>
		</table>


		<s:form action="upload" theme="simple" method="post" enctype="multipart/form-data">

			<table align="center" width="50%" border="1">
				<tr>
					<td>
						username
					</td>
					<td>
						<s:textfield name="username"></s:textfield>
					</td>
				</tr>

				<tr>
					<td>
						password
					</td>
					<td>
						<s:password name="password"></s:password>
					</td>
				</tr>
				<tr>
					<td>
						file
					</td>

					<td id="more">
						<s:file name="file"></s:file><input type="button" value="Add More.." onclick="addMore()">
					</td>
				</tr>
				
				<tr>
					<td>
						<s:submit value=" submit "></s:submit>
					</td>

					<td>
						<s:reset value=" reset "></s:reset>
					</td>
				</tr>
			</table>

		</s:form>

</body>

</html>
下面是action
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {
	private String username;

	private String password;

	private List<File> file;
	
	private List<String> fileFileName;

	private List<String> fileContentType;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public List<File> getFile() {
		return file;
	}

	public void setFile(List<File> file) {
		this.file = file;
	}

	public List<String> getFileFileName() {
		return fileFileName;
	}

	public void setFileFileName(List<String> fileFileName) {
		this.fileFileName = fileFileName;
	}

	public List<String> getFileContentType() {
		return fileContentType;
	}

	public void setFileContentType(List<String> fileContentType) {
		this.fileContentType = fileContentType;
	}

	@Override
	public String execute() throws Exception {
		System.out.println(getFile().size());
		for (int i = 0; i < file.size(); i++) {
			InputStream is = new FileInputStream(file.get(i));

			String root = ServletActionContext.getRequest().getRealPath("/upload");

			File destFile = new File(root, this.getFileFileName().get(i));

			OutputStream os = new FileOutputStream(destFile);

			byte[] buffer = new byte[400];

			int length = 0;

			while ((length = is.read(buffer)) > 0) {
				os.write(buffer, 0, length);
			}

			is.close();

			os.close();
		}

		return SUCCESS;

	}


}
下面是配置
<action name="upload" class="com.eagle.struts2.test.action.UploadAction">
			<result name="success">/uploadResult.jsp</result>
			<result name="input">/upload.jsp</result>
			<!-- <param name="savePath">/upload</param> --> 
			
			<interceptor-ref name="fileUpload">
				<param name="maximumSize">102400</param>
				<!-- <param name="allowedTypes">application/vnd.ms-powerpoint</param> --><!--   在tocamt里面的webxml中可以找到 -->
			</interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>
分享到:
评论
3 楼 wm920 2008-06-16  
Struts2拦截器是实现多层拦截的,你也可以指定要拦截那个方法,这样就不回报错了。
2 楼 benjamin0917 2008-06-12  
用spring了?我用了spring后,这个功能偶尔好用。
1 楼 network-eagle 2008-04-25  
发现问题所在 。我在别的地方配置了新的拦截器。并且设置了为默认的拦截器。但我在的拦截器栈里面也加上了struts2 里面默认的那个拦截器。。不知道什么原因了。继续研究中。。现在我把我自定义的拦截器屏蔽了。功能就能正常运作了。有点不理解。我没发现我的拦截器有什么问题。都能跑通的。。继续研究吧

相关推荐

    struts2+jquery+ajax文件异步上传

    在Struts2的配置文件中,我们可以定义这些规则,例如限制上传文件的大小,只接受特定类型的文件(如图片、文档等)。此外,我们还需要关注安全问题,防止恶意文件上传。 文件上传的实现通常包括以下几个步骤: 1. ...

    struts2文件上传实例

    7. **结果展示**:文件上传成功后,可以返回一个结果页面,显示上传成功的信息,或者提供上传文件的链接。这可以通过Struts2的`&lt;s:property&gt;`标签或者JSP的EL表达式实现。 8. **安全性**:在实际应用中,必须注意...

    struts2 文件上传 测试通过版

    在Struts2中,文件上传功能是常见的需求,特别是在处理用户提交表单时,比如上传图片、文档等。本文将详细讲解如何在Struts2中实现文件上传功能,并探讨相关知识点。 1. **Struts2 Action类配置**: 在Struts2中,...

    struts2(ssh)带进度条文件上传 demo 的jar包1

    这个"struts2(ssh)带进度条文件上传 demo 的jar包1"可能是为了演示如何实现这一功能,但由于描述中提到权限问题,jar包被分成了三次上传,这里是第一部分。 在实现带进度条的文件上传时,通常需要以下步骤: 1. ...

    基于Struts2的文件上传下载功能的完整源代码。

    在基于Struts2的文件上传下载功能中,它提供了处理用户上传文件和提供文件下载的服务。这个完整的源代码是实现这些功能的一个实例,经过测试确保了其正确性和可用性。 首先,我们要理解Struts2中的Action类。Action...

    struts框架-文件上传下载

    3. 文件存储位置:确保上传文件存储在安全目录下,避免用户访问到其他敏感文件。 4. 下载安全:对于下载,应避免直接暴露文件路径,使用动态生成的文件名,防止恶意用户猜测其他文件地址。 四、优化策略 1. 断点...

    struts实现的文件上传下载功能

    避免路径遍历攻击,确保文件存储在安全目录下,防止恶意文件的执行,以及检查上传文件的大小和类型,防止过大文件导致服务崩溃或恶意文件注入。 在本例中,提供的"updown"可能是一个包含示例代码、配置文件或测试...

    struts2 上传文件(绝对能用,经过测试)

    绝对能用,经过测试,好用,简单,代码少,下载吧,相信我。没错。我做过实验

    struts上传问题研究

    在"struts上传问题研究"这个主题中,我们将深入探讨Struts2框架中的文件上传功能,以及可能遇到的问题和解决方案。 文件上传是Web应用中常见的功能,Struts2通过Action类的`@FileUpload`注解或`@Params`注解支持...

    java文件上传,Struts2文件上传,demo下载

    -- 设置最大上传文件大小,单位为字节 --&gt; &lt;param name="allowedTypes"&gt;image/jpeg,image/png,application/pdf&lt;/param&gt; &lt;!-- 设置允许上传的文件类型 --&gt; &lt;result name="success"&gt;/success.jsp ...

    struts2_uploadify带进度条的多文件上传下载

    Struts2 Uploadify是一个在Java Web开发中常用的插件,它结合了Struts2框架和Uploadify jQuery插件,能够实现文件的多选、上传进度显示以及后台处理等功能。这个项目示例提供了一个完整的解决方案,使得用户在上传多...

    Struts2多文件上传

    在Struts2中,上传文件需要用到`struts2-convention-plugin`和`struts2-core`这两个核心依赖。 ### 配置Struts2 在`struts.xml`配置文件中,我们需要声明一个用于处理文件上传的Action。例如: ```xml ...

    json struts2 ajax文件上传 input type=file,选择相同文件也提交 附带类库

    在测试过程中,记得设置好服务器的临时目录,以便Struts2可以临时存储上传的文件。 总的来说,这个项目展示了如何利用JSON、Struts2和Ajax技术实现文件上传,即使用户选择了相同的文件。通过合理的后端验证和前端...

    struts2 android httpclient 上传文件

    Struts2、Android和HttpClient是三个关键的技术领域,它们在本次文件上传的场景中相互结合。Struts2是一个流行的Java Web框架,用于构建MVC(模型-视图-控制器)结构的应用程序。Android是Google开发的移动操作系统...

    uploadify3与struts2结合实现有进度条文件上传实例

    毕竟是第一次用 不是很熟悉 希望有人发现问题可以交流一下"&gt;这是根据uploadify3 2结合struts2搭建的文件上传环境 可以直接导入eclipse运行 每步实现基本都加了注释 以下是我碰到的问题: 1 判断session是否失效 ...

    Struts2文件上传

    - 文件大小限制:Struts2可以通过配置`struts.multipart.maxSize`参数限制上传文件的最大大小。 - 文件类型检查:在Action中进行后端验证,确保上传的文件类型符合预期。 9. **示例代码** ``` public class ...

    解决Struts2上传文件后文件大小变大

    总的来说,解决Struts2上传文件后文件大小变大的问题,主要在于正确处理输入流和输出流,以及确保使用正确的文件上传配置和API。在处理文件操作时,推荐使用成熟的库如Apache Commons IO,它们通常提供了更稳定和...

    在Struts 2中实现文件上传

    `CommonsFileUpload`通过将HTTP请求中的数据部分保存到服务器端的临时文件夹中,再由Struts 2框架的`fileUpload`拦截器处理这些临时文件,将其绑定到Action类的相应属性上,从而实现了对上传文件的处理。 #### 具体...

    struts2文件上传

    在Struts2中实现文件上传功能是一项常见的任务,这通常涉及到用户通过Web界面选择本地文件并将其发送到服务器进行存储或处理。以下是对"struts2文件上传"这一主题的详细解释。 1. **Struts2框架基础** Struts2是...

    Struts2实现文件上传案例

    ### Struts2实现文件上传案例 #### 概述 本文将详细介绍如何利用Struts2框架实现文件上传功能。Struts2是Apache软件基金会的一个开源Web应用框架,它使用MVC设计模式并支持多种编程模式(如命令式、声明式、函数式...

Global site tag (gtag.js) - Google Analytics