文档章节

Struts2文件上传

SPPan
 SPPan
发布于 2017/06/02 10:30
字数 574
阅读 3
收藏 0
点赞 0
评论 0

struts2的文件上传主要依赖的是org.apache.struts2.interceptor.FileUploadInterceptor这个拦截器,关于这个拦截器我不想做过多的研究,这里主要讨论的是该拦截器里面定义的几个关于文件上传的重要属性。

以下的属性主要配置在struts.xml中对应文件上传Action的拦截器中。

protected Long maximumSize;   //允许上传单个文件的大小单位为字节
protected String allowedTypes; //允许上传的文件类型详见tomcat中web.xml文件
protected Set allowedTypesSet; //允许上传的文件类型Set集合详见tomcat中web.xml文件。allowedTypes与allowedTypesSet属性如有多个值之间用逗号隔开

示列:

<action name="Upload" class="UploadAction">
    <result name="success">success.jsp</result>
    <result name="input">upload.jsp</result>
    <interceptor-ref name="fileUpload">
        
        <param name="maximumSize">102400</param>
        
        <param name="allowedTypesSet">application/msword</param>
    </interceptor-ref>
    <interceptor-ref name="defaultStack"/>
</action>

**注意:**要使用文件上传功能我们必须显实的在对应文件上传的Action中指定这个拦截器及在该拦截器中配置我们需要的参数,最后别忘了附加上这个默认的拦截器,这样才能真正发挥struts2的文件上传功能。

Action中的示列代码:

publicclass FileUploadAction extends ActionSupport {
    private File file;
    private String fileContentType;
    private String fileFileName;
    private String memo;
    @Override
    public String execute() throws Exception {
        String path=ServletActionContext.getRequest().getRealPath("/upload");
        if(file==null) {
            this.addFieldError("file", "文件不能为空,请选择");
            return INPUT;
        }else{
            InputStream is=new FileInputStream(this.getFile());
            OutputStream os=new FileOutputStream(new File(path,this.getFileFileName()));
            byte[] buf=newbyte[1024];
            int length=0;
            while((length=is.read(buf))>0)
            {
                os.write(buf, 0, length);
            }
            is.close();
            os.close();
        }
        return SUCCESS;
    }
    public File getFile() {
        return file;
    }
    public void setFile(File file) {
        this.file = file;
    }
    public String getFileContentType() {
        return fileContentType;
    }
    public String getFileFileName() {
        return fileFileName;
    }
    public String getMemo() {
        return memo;
    }
    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }
    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }
    public void setMemo(String memo) {
        this.memo = memo;
    }
}

jsp中的示列代码:

<s:form action="Upload" enctype="multipart/form-data" method="post">
    <s:file name="file"></s:file>
    <s:textfield name="memo"></s:textfield>
    <s:submit></s:submit>
</s:form>

struts.xml中的示列代码:

<action name="Upload" class="UploadAction">
    <result name="success">/success.jsp</result>
    <result name="input">/upload.jsp</result>
    <interceptor-ref name="fileUpload">
        <param name="maximumSize">102400</param>
        <param name="allowedTypes">application/msword</param>
   </ interceptor-ref>
    <interceptor-ref name="defaultStack"/>
</action>

说明

  1. 设置文件上传属性在Action中对应的类型的java.io.File;

  2. 设置文件上传表单的enctype="multipart/form-data" method="post"

private File **file**;

private String **file**ContentType;

private String **file**FileName;
  1. 粗体部分与文件上传表单中文件上传属性的name一致。

  2. 其余部分的为固定写法。

© 著作权归作者所有

共有 人打赏支持
SPPan
粉丝 10
博文 29
码字总数 15103
作品 0
成都
程序员

暂无相关文章

Sqoop

1.Sqoop: 《=》 SQL to Hadoop 背景 1)场景:数据在RDBMS中,我们如何使用Hive或者Hadoop来进行数据分析呢? 1) RDBMS ==> Hadoop(广义) 2) Hadoop ==> RDBMS 2)原来可以通过MapReduce I...

GordonNemo ⋅ 34分钟前 ⋅ 0

全量构建和增量构建的区别

1.全量构建每次更新时都需要更新整个数据集,增量构建只对需要更新的时间范围进行更新,所以计算量会较小。 2.全量构建查询时不需要合并不同Segment,增量构建查询时需要合并不同Segment的结...

无精疯 ⋅ 44分钟前 ⋅ 0

如何将S/4HANA系统存储的图片文件用Java程序保存到本地

我在S/4HANA的事务码MM02里为Material维护图片文件作为附件: 通过如下简单的ABAP代码即可将图片文件的二进制内容读取出来: REPORT zgos_api.DATA ls_appl_object TYPE gos_s_obj.DA...

JerryWang_SAP ⋅ 今天 ⋅ 0

云计算的选择悖论如何对待?

导读 人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云...

问题终结者 ⋅ 今天 ⋅ 0

637. Average of Levels in Binary Tree - LeetCode

Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这个树,把map里面填值,遍历结束后,再遍历这个map,把每...

yysue ⋅ 今天 ⋅ 0

IDEA配置和使用

版本控制 svn IDEA版本控制工具不能使用 VCS-->Enable Version Control Integration File-->Settings-->Plugins 搜索Subversion,勾选SVN和Git插件 删除.idea文件夹重新生成项目 安装SVN客户......

bithup ⋅ 今天 ⋅ 0

PE格式第三讲扩展,VA,RVA,FA的概念

作者:IBinary 出处:http://www.cnblogs.com/iBinary/ 版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边...

simpower ⋅ 今天 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 今天 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 今天 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部