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。
求解释是哪里出了问题!!!!

解决方案 »

  1.   


    是不是你的struts.xml里面限制上传文件的格式了?
      

  2.   

    我没设上传格式啊,默认应该都能上传的啊,
    下面是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
      

  3.   

    刚想到要不要换个浏览器试试,之前用的是chrome测试,后来用IE和firefox测试了下发现居然
    没任何问题,顿时湿了,找了一整天的问题居然出在这上面!!!不知道有没有人也遇到过类似
    的问题。这是bug吗?
      

  4.   

    额,还真没发现过原来chrome会存在这个问题
      

  5.   


    恩,谁会想到是chrome的问题
      

  6.   

    <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=" 上传 "/> 改成struts2的标签试试,<s:form> <s:file>
      

  7.   


    这个没有试过,我刚把chrome跟新了又测试了一下,没问题了。之前版本是7.*,刚跟新到11.0.*了。
    这可能是chrome的bug吧
      

  8.   

    呵呵,我说呢,我就用的chrome没问题啊,原来是楼主版本太低啦。
      

  9.   

    这段代码我已经试过了,没有任何问题,包括任何文件。但是struts-default.xml文件中默认限制上传2M的文件。<struts> <constant name="struts.action.extension" value="do" />
    <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;
    }}