struts.xml 代码如下:<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts> <package name ="fileUploadDemo" extends ="struts-default">
<action name ="fileUpload" class ="org.qiujy.web.struts2.FileUploadAction">
<!-- 动态设置Action中的savePath属性的值 -->
<param name="savePath">/upload</param>
<result name ="success">/succ.jsp</result>
</action >
</package >
</struts>
jsp代码:<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Struts2 File Upload</title>
</head>
<body>
<form action="fileUpload.action" method="POST" enctype="multipart/form-data">
文件标题:<input type="text" name="title" size="50"/><br/>
选择文件:<input type="file" name="upload" size="50"/><br/>
<input type="submit" value=" 上传 "/>
</form>
</body>
</html>action 代码:package org.qiujy.web.struts2;
import java.io.IOException;
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import javax.servlet.ServletContext; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; /** *处理文件上传的Action类 *@authorqiujy *@version1.0 */public class FileUploadAction extends ActionSupport { // private static final int BUFFER_SIZE = 16 * 1024;
// 文件标题
private String title;
// 上传文件域对象
private File upload;
// 上传文件名
private String uploadFileName;
// 上传文件类型
private String uploadContentType;
// 保存文件的目录路径(通过依赖注入)
public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public File getUpload() {
return upload;
} public void setUpload(File upload) {
this.upload = upload;
} public String getUploadFileName() {
return uploadFileName;
} public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
} public String getUploadContentType() {
return uploadContentType;
} public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
@Override
public String execute() throws Exception {
//根据服务器的文件保存地址和原文件名创建目录文件全路径 ServletContext svct = ServletActionContext.getServletContext();
System.out.println(upload);
if(upload != null)
{
String dataDir = svct.getRealPath("/upload");
File saveFile = new File(dataDir,uploadFileName);
upload.renameTo(saveFile);
}
return SUCCESS;
}
} 测试时只能上传txt文件,其他格式的文件都不能上传,打印出的upload为null。
求解释是哪里出了问题!!!!
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts> <package name ="fileUploadDemo" extends ="struts-default">
<action name ="fileUpload" class ="org.qiujy.web.struts2.FileUploadAction">
<!-- 动态设置Action中的savePath属性的值 -->
<param name="savePath">/upload</param>
<result name ="success">/succ.jsp</result>
</action >
</package >
</struts>
jsp代码:<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Struts2 File Upload</title>
</head>
<body>
<form action="fileUpload.action" method="POST" enctype="multipart/form-data">
文件标题:<input type="text" name="title" size="50"/><br/>
选择文件:<input type="file" name="upload" size="50"/><br/>
<input type="submit" value=" 上传 "/>
</form>
</body>
</html>action 代码:package org.qiujy.web.struts2;
import java.io.IOException;
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import javax.servlet.ServletContext; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; /** *处理文件上传的Action类 *@authorqiujy *@version1.0 */public class FileUploadAction extends ActionSupport { // private static final int BUFFER_SIZE = 16 * 1024;
// 文件标题
private String title;
// 上传文件域对象
private File upload;
// 上传文件名
private String uploadFileName;
// 上传文件类型
private String uploadContentType;
// 保存文件的目录路径(通过依赖注入)
public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public File getUpload() {
return upload;
} public void setUpload(File upload) {
this.upload = upload;
} public String getUploadFileName() {
return uploadFileName;
} public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
} public String getUploadContentType() {
return uploadContentType;
} public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
@Override
public String execute() throws Exception {
//根据服务器的文件保存地址和原文件名创建目录文件全路径 ServletContext svct = ServletActionContext.getServletContext();
System.out.println(upload);
if(upload != null)
{
String dataDir = svct.getRealPath("/upload");
File saveFile = new File(dataDir,uploadFileName);
upload.renameTo(saveFile);
}
return SUCCESS;
}
} 测试时只能上传txt文件,其他格式的文件都不能上传,打印出的upload为null。
求解释是哪里出了问题!!!!
是不是你的struts.xml里面限制上传文件的格式了?
下面是Value Stack 里的值,我不懂为啥file,filename,contenttype都为nullValue Stack ContentsObject Property Name Property Value
org.qiujy.web.struts2.FileUploadAction texts null
title jlkjkl
actionErrors []
errors {}
fieldErrors {}
errorMessages []
container There is no read method for container
locale zh_CN
actionMessages []
uploadContentType null
uploadFileName null
upload null
com.opensymphony.xwork2.DefaultTextProvider texts null
没任何问题,顿时湿了,找了一整天的问题居然出在这上面!!!不知道有没有人也遇到过类似
的问题。这是bug吗?
恩,谁会想到是chrome的问题
文件标题:<input type="text" name="title" size="50"/><br/>
选择文件:<input type="file" name="upload" size="50"/><br/>
<input type="submit" value=" 上传 "/> 改成struts2的标签试试,<s:form> <s:file>
这个没有试过,我刚把chrome跟新了又测试了一下,没问题了。之前版本是7.*,刚跟新到11.0.*了。
这可能是chrome的bug吧
<constant name="struts.i18n.encoding" value="GBK" />
<constant name="struts.devMode" value="true" />
<constant name="struts.configuration.xml.reload" value="true" /> <package name="con.duoyide" extends="struts-default">
<action name="fileUpload"
class="com.duoyide.action.FileAction">
<result name="success">/success.jsp</result>
</action>
</package></struts>
<%@ page language="java" pageEncoding="GBK"%>
<html>
<head>
<title>Struts2 File Upload</title>
</head>
<body>
<form action="fileUpload.do" method="POST"
enctype="multipart/form-data">
文件标题:
<input type="text" name="title" size="50" />
<br />
选择文件:
<input type="file" name="upload" size="50" />
<br />
<input type="submit" value=" 上传 " />
</form>
</body>
</html>
public class FileAction extends ActionSupport { private static final long serialVersionUID = 1189106219658323341L; public static final int BUFFER_SIZE = 16 * 1024; // 文件标题
private String title; // 上传文件域对象
private File upload; // 上传文件名
private String uploadFileName; // 上传文件类型
private String uploadContentType; // 保存文件的目录路径(通过依赖注入)
public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public File getUpload() {
return upload;
} public void setUpload(File upload) {
this.upload = upload;
} public String getUploadFileName() {
return uploadFileName;
} public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
} public String getUploadContentType() {
return uploadContentType;
} public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
} @Override
public String execute() throws Exception {
// 根据服务器的文件保存地址和原文件名创建目录文件全路径 ServletContext svct = ServletActionContext.getServletContext();
System.out.println(upload);
if (upload != null) {
String dataDir = svct.getRealPath("/upload");
File saveFile = new File(dataDir, title);
upload.renameTo(saveFile);
}
return SUCCESS;
}}