项目目录:

struts.xml配置:

<constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <constant name="struts.devMode" value="true" />

    <package name="upload" namespace="/upload" extends="struts-default">


        <action name="upload" class="com.oracle.upload.UploadAction">
            <result>
               /uploadsucc.jsp
            </result>
        </action>
    </package>

 

上传图片jsp代码:刚开始一直报错,原来没写enctype,原来是没写form的enctype属性。enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。有三个参数:

1,application/x-www-form-urlencoded。在发送前编码所有字符(默认)

2,multipart/form-data。不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。

3,text/plain。空格转换为 "+" 加号,但不对特殊字符编码。

<body>
       <form action="<%=basePath%>upload/upload.action" method="post"   enctype="multipart/form-data">
           文件::<input type="file" name="image">
                   <input type="submit" value="上传"/>
       </form>
  </body>

效果:

UploadAction代码:

package com.oracle.upload;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport{
    
    private File image;  //接收jsp传的参数
    
    /**
     * imageFileName是Struts2内置的属性。值是上传的文件名,如1.jpg。
     * 用<s:property value=""/>标签可以显示其值。<s:debug>标签在值栈里也可以看到。
     */
    private String imageFileName; 
    
    
    public  String  execute() throws IOException{
        
        /**
         * Path---E:\tomcat7.0\webapps\Struts2_FileUpload2\images,
         * ServletActionContext.getServletContext()得到项目的根目录。
         * 再.getRealPath("/images")就是项目根目录下的images文件夹。
         */
        String path = ServletActionContext.getServletContext().getRealPath("/images");
        
        //String path = "E:/project/images";还可以自己new一个存放文件的路径。
        //System.out.println("Path---"+path);
        
        if(image !=  null){
            
            /**
             * new一个我们存放文件的:目录+文件名
             * 父路径:new File(path)就是E:\tomcat7.0\webapps\Struts2_FileUpload2\images
             * 子文件:就是上传的文件名:如1.jpg
             * 所以全路径为:E:\tomcat7.0\webapps\Struts2_FileUpload2\images\1.jpg
             */
            File  savefile = new File(new File(path),imageFileName);
            
            //System.out.println("保存图片的绝对路径+图图片名:"+savefile.getAbsolutePath());
            
            
            if(! savefile.getParentFile().exists()){  
                
                //如果父路径不存在,创建他的所有路径。
                
                savefile.getParentFile().mkdirs();
                //*将image拷贝到我们的文件夹
                FileUtils.copyFile(image, savefile);
                
                
            }else{
                //如果父路径存在,直接拷贝。
                FileUtils.copyFile(image, savefile);
                
            }
            
            ActionContext.getContext().getSession().put("message", "上传成功");
        }else{
            ActionContext.getContext().getSession().put("message", "上传失败");
        }
        
        return  SUCCESS;
    }

    public File getImage() {
        return image;
    }

    public void setImage(File image) {
        this.image = image;
    }

    public String getImageFileName() {
        return imageFileName;
    }

    public void setImageFileName(String imageFileName) {
        this.imageFileName = imageFileName;
    }
}

上传成功uploadsucc.jsp:注意加上<%@ taglib uri="/struts-tags" prefix="s" %>标签。

 <body>
  ${message}<br>
    <img src="<%=basePath%>images/${imageFileName}" style="width: 300px;height: 200px">
    <br/>
    <s:property value="getImageFileName()"/>
    <s:debug></s:debug>
    <hr/>
    <form action="upload/upload.action" method="post" enctype="multipart/form-data">
        选择文件<input type="file" name="image">
        <input type="submit" value="上传"/>
    </form>
  </body>

上传成功效果:

 

 欢迎关注个人公众号一起交流学习: