博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.6 Struts2上传文件
阅读量:7046 次
发布时间:2019-06-28

本文共 4586 字,大约阅读时间需要 15 分钟。

hot3.png

3.6.1上传单个文件

        Struts2的文件上传默认使用的是Jakarta的Common-FileUpload文件上传框架。因此需要增加两个Jar包,即:common-io-1.4.jarcommons-fileupload-1.2.1.jar

下面举例实现文件的上传并说明需要注意的步骤。该例中把要上传的文件放在指定的文件夹下(D:\MyFiles\upload),依然根据原始的步骤来开发该实例。

1. 建立项目

打开MyEclipse,建立一个Web项目,命名为“StrutsUpload”。

2. 加载Struts 2的基本类库

注意这里要把上面提到的upload及io两个Jar包也添加进来。

3. 修改web.xml

其内容见。

4. 修改index.jsp

在创建项目的时候,在项目的WebRoot下会自动生成一个index.jsp文件,读者可以应用该文件,修改其中内容,也可以自己建立JSP文件,这里就用该index.jsp文件,修改其中内容即可。代码实现为:

<%@ page language="java" pageEncoding="utf-8"%><%@ taglib uri="/struts-tags" prefix="s"%>      文件上传        
      
      
      

multipart/form-data:表示该编码方式会以二进制流的方式来处理表单数据。

5. Action类

在src文件夹下建立org.action包,在该包下建立自定义Action类UploadAction。

package action;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import com.opensymphony.xwork2.ActionSupport;public class UploadAction extends ActionSupport{    private File upload; //上传文件    private String uploadFileName; //上传的文件名    public File getUpload() {        return upload;    }    public void setUpload(File upload) {        this.upload=upload;    }    public String execute() throws Exception {        InputStream is=new FileInputStream(getUpload()); //根据上传的文件得到输入流        OutputStream os=new FileOutputStream("d:\\upload\\"+uploadFileName); //指定输出流地址        byte buffer[]=new byte[1024];        int count=0;        while((count=is.read(buffer))>0){            os.write(buffer,0,count); //把文件写到指定位置的文件中        }        os.close(); //关闭        is.close();        return SUCCESS; //返回    }    public String getUploadFileName() {        return uploadFileName;    }    public void setUploadFileName(String uploadFileName) {        this.uploadFileName=uploadFileName;    }}

Struts2上传文件的默认大小限制是2MB。如果要修改默认大小,在struts2的struts.properties文件中修改struts.multipart.maxSize。例如:struts.multipart.maxSize=1024,,表示上传文件的总大小不能超过1k。

6. struts.xml文件

struts.xml是Struts 2应用中必不可少的一个文件,它是从页面通向Action类的桥梁,配置了该文件后,JSP文件的请求才能顺利地找到要处理请求的Action类。代码如下:

    
        
            
/success.jsp            

我现在的版本是Struts 2.2.1,会报错“No result defined for action action.UploadAction and result success”,解决方案是指定namespace

    
        
/success.jsp    

关于产生原因是:

        是在2.1中引入的某个插件struts2-convention-plugin-2.1.8.jar,这个插件是2.1版本中新添加的默认核心包,这个插件是实现Struts2的零配置,但是这样问题就来了,如果引入就必须引入namespace命名空间,否则就会出现刚才的No result defined for action的异常。

7. 建立 success.jsp

上传成功后,跳转到成功页面。代码非常简单:

<%@ page language="java" pageEncoding="utf-8"%>            成功页面                恭喜你!上传成功    

8. 部署运行

部署项目,启动Tomcat,在浏览器中输入http://localhost:8080/StrutsUpload/index.jsp,选择要上传的文件,单击【上传】按钮,就会跳转到如图所示的界面。打开D盘,在upload文件夹下就可以看到已上传的文件。 

063743_DsGL_220508.png

3.6.2.上传多个文件

下面是在单个文件上传示例的基础上修改,来介绍多文件上传。

修改index.jsp:

<%@ page language="java" pageEncoding="utf-8"%><%@ taglib uri="/struts-tags" prefix="s" %>            文件上传                
        
            
            
            
            
            

页面完成以后,就可以修改对应的Action。代码修改。

package 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 com.opensymphony.xwork2.ActionSupport;public class UploadAction extends ActionSupport{    private List
 upload; //上传的文件内容,由于是多个,用List集合    private List
 uploadFileName; //文件名    public String execute() throws Exception {        if(upload!=null){            for (int i=0; i < upload.size(); i++) { //遍历,对每个文件进行读/写操作                InputStream is=new FileInputStream(upload.get(i));                OutputStream os=new FileOutputStream("d:\\upload\\"+getUploadFileName().get(i));                byte buffer[]=new byte[1024];                int count=0;                while((count=is.read(buffer))>0){                    os.write(buffer,0,count);                }                os.close();                is.close();            }        }        return SUCCESS;    }    public List
 getUpload() {        return upload;    }    public void setUpload(List
 upload) {        this.upload=upload;    }    public List
 getUploadFileName() {        return uploadFileName;    }    public void setUploadFileName(List
 uploadFileName) {        this.uploadFileName=uploadFileName;    }}

附:目录

转载于:https://my.oschina.net/jerrypan/blog/619981

你可能感兴趣的文章
使用Feign实现Form表单提交
查看>>
linux 压缩及归档
查看>>
Linux下的DNS
查看>>
floor和ceil函数的返回自是double型的
查看>>
14.3继承
查看>>
死锁预防和死锁防止
查看>>
leetcode--合并两个有序的链表
查看>>
企业运维—玩转 windows server 2016 DNS服务
查看>>
Scala flatMap的变体
查看>>
rpm,yum程序包管理器
查看>>
Hadoop常见错误及处理方式
查看>>
docker swarm ,滚动更新
查看>>
门户网站磁盘占满,清除方法
查看>>
Java设计模式之代理模式
查看>>
rsync+inotify实时同步备份服务
查看>>
思科·远程连接、密码破解
查看>>
iptables防火墙(一)
查看>>
c++学习笔记---虚函数与纯虚函数
查看>>
Android 音视频深入 三 MP4解码播放视频 (附源码下载)
查看>>
Linux学习- 1 初始Linux 20180407
查看>>