network-eagle 发表于 2013-1-15 03:10:31

最近写测试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.." ></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;}@Overridepublic 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;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>
页: [1]
查看完整版本: 最近写测试struts2上传文件发现的问题