`
network-eagle
  • 浏览: 58075 次
  • 性别: 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 文件上传 测试通过版

    struts2 fileupload 文件上传

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

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

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

    基于Struts2的文件上传下载功能的完整源代码。经过测试可正确运行。

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

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

    struts2上传图片到Oracle

    struts2上传图片到Oracle,并进行显示,测试可以成功上传

    struts2上传实例

    struts2 struts2上传 struts2上传文件 struts2上传实例 struts上传,随手写的一个Demo,测试可以通过.

    java struts2 文件上传 支持大文件

    测试过了,好用的上传程序。java struts2 带进度显示的 效果不错 只支持单个文件

    02_张孝祥09年Struts视频_文件上传单元

    10.防止上传文件的名称冲突与综合测试 11.限制上传文件的大小与演示超限后的问题 12.深入分析上传文件超限后的问题原因 13.上传文件超限后的编程处理 14.多文件上传的问题及论坛项目的评论 15.修正从配置文件中读取...

    11_张孝祥09年Struts视频_文件上传单元

    10.防止上传文件的名称冲突与综合测试 11.限制上传文件的大小与演示超限后的问题 12.深入分析上传文件超限后的问题原因 13.上传文件超限后的编程处理 14.多文件上传的问题及论坛项目的评论 15.修正从配置文件中读取...

    用struts1实现文件的上传和下载

    用struts1实现文件的上传和下载,在本机已测试成功,一个简单的实现文件上传和下载的功能

    Struts2多文件上传与邮件附件发送

    1.struts.multipart.maxSize掌控整个项目所上传文件的最大的Size。超过了这个size,后台报错, 程序处理不了如此大的文件。fielderror里面会有如下的提示: the request was rejected because its size (16272982) ...

    struts2文件上传下载

    Struts2实现文件上传下载,本人亲自测试过,没有问题。

    ajax_struts2_上传与下载_无刷新

    2. 采用jquery.form.js实现ajaxForm提交表单或上传文件到服务器。 3. 在struts2的Action通过2种不同的实现方法返回json格式的字符串。 4. 针对商品实现简单无刷新上传与下载 4. 批量导入数据采用的是导入test文件夹...

    Struts2下多文件的上传与下载

    在网络上,对于Java处理文件上传和下载的技术比较...最近也在研究一下文件的上传和下载,在整合网上、浪曦风中叶老师和自己的学习的思想,写了这个工程,提供给大家参考,所以的代码终在IE、FireFox、Chrome测试通过。

    struts2+hibernate文件上传以及连接数据库操作

    strtus2+hibernate文件上传及连接数据库操作,使用模拟http请求测试的,验证类是updateTest类,文件上传类是uplodController,连接数据库的操作时productController类

    struts2上传(eclipse web项目)

    测试时,建议自己建立那个用于存放上传文件的文件夹 (UploadAction中指定的路径是E:\tjx\eclipsewp\Struts2Demo2\WebContent\upload,你可以自定义,到时改一下action中写的那个路径\\) struts2版本:struts2.3.4

    struts1.2 图片文件上传(单个/动态多个)

    struts1.2 图片文件上传(单个/动态多个) 单个的采用通用Action 需要ActionForm的,而动态多个上传是采用动态代理类(DispatchAction) 希望对大家有用,另JSP在IE测试通过,JS我就不再处理了!

    Struts2.0文件上传实例

    基于Struts2.0框架的文件上传实例, 可以同入门者参考 已测试过,可运行.

    Struts2 in action中文版

    11.1.2 Struts 2如何解决本地Java对i18n支持的问题 243 11.2 Struts 2 i18n示例 244 11.2.1 Struts 2 i18n快速展示 244 11.2.2 幕后一览 246 11.3 Struts 2 i18n详情 247 11.3.1 Struts 2默认的TextProvider Re-...

    struts2+swfupload实现大文件多文件上传

    资源绝对可以用,经本人测试。。 原理:一次可以全选N个文件,然后将文件放入队列中,依次单个文件上传。可以设定上传文件大小类型,只需要更改路径就可以了

Global site tag (gtag.js) - Google Analytics