调查管理系统 -(8)增加Logo--Struts2文件上传

1、增加Logo

  增加Logo即上传图片,因此使用到Struts2的文件上传功能。Struts2的文件上传依靠其FileUploadInterceptor(文件上传拦截器),其使用的依然是Apache提供的FileUpload文件上传组件(commons-fileupload.jar)。

2、Struts2文件上传的使用步骤

  Ⅰ、在 Jsp 页面的文件上传表单里使用 file 标签。如果需要一次上传多个文件,就必须使用多个 file 标签,但它们的名字必须是相同的。

  Ⅱ、在 Action 中新添加 3 个和文件上传相关的属性。这 3 个属性的名字必须是以下格式

•[File Name] : File -被上传的文件。例如:data

•[File Name]ContentType : String -上传文件的文件类型。例如:dataContentType

•[File Name]FileName : String -上传文件的文件名。例如:dataFileName

Ⅲ、如果上传多个文件可以使用 List

3、配置FileUpload 拦截器,对上传文件加以约束

<interceptors>
    <!-- 注册登陆拦截器 -->
    <interceptor name="loginInterceptor" class="com.atguigu.surveypark.struts2.interceptor.LoginInterceptor" />
    <!-- 定义拦截器栈 -->
    <interceptor-stack name="surveyparkStack">
        <interceptor-ref name="loginInterceptor" />
        <interceptor-ref name="defaultStack">
            <param name="modelDriven.refreshModelBeforeResult">true</param>
            <!-- 文件大小 -->
            <param name="fileUpload.maximumSize">60000</param>
            <!-- 文件扩展名 -->
            <param name="fileUpload.allowedExtensions">.jpg,.jpeg,.png,.bmp,.gif</param>
            <!-- 文件内容类型 -->
            <param name="fileUpload.allowedTypes">image/jpg,image/jpeg,image/pjpeg,image/png,image/gif,image/bmp</param>
        </interceptor-ref>
    </interceptor-stack>
</interceptors>

–maximumSize: 上传单个文件的最大长度(以字节为单位), 默认值为 2 MB;

–allowedTypes: 允许上传文件的类型, 各类型之间以逗号分隔;

–allowedExtensions: 允许上传文件扩展名, 各扩展名之间以逗号分隔;

Commons FileUpload 组件默认接受上传文件总的最大值为 2M, 可以通过在 struts 配置文件中配置常量的方式修改。

4、对错误消息国际化

  在Struts2的核心包struts2-core-version.jar中的struts-messages.properties文件中包含了Struts2内置的各种默认的错误消息,其中关于文件上传的错误提示消息主要有如下3个:

struts.messages.error.file.too.large=The file is to large to be uploaded: {0} "{1}" "{2}" {3}
struts.messages.error.content.type.not.allowed=Content-Type not allowed: {0} "{1}" "{2}" {3}
struts.messages.error.file.extension.not.allowed=File extension not allowed: {0} "{1}" "{2}" {3}

  Struts2有个很大的特点就是属性与Action相关,如国际化、类型转换器的属性文件都与Action相关,所谓的Action相关就是跟Action放在一起。因此,要对错误消息国际化首先要在Action所在包中建立一个名字为ActionName.properties的属性文件作为默认文件,同时建立一个名称为ActionName_zh_CN.properties的属性文件作为中文的国际化文件,并在其中覆盖上面的3个错误消息。

  注:1)当Eclipse或MyEclipse没有属性文件*.properties的编辑器器(能够自动进将中文转换为ASCII码)时,要使用JDK中的转码工具native2ascii.exe将包含中文的文件转换为ASCII形式。如对1.txt进行转码(ascii码),产生2.txt文件。首先使用cmd进入命令行,并切换到文件所在的目录,然后使用命令:

native2ascii -encoding gb2312 1.txt 2.txt

2)在文件上传时,IE浏览器会检测文件头的信息以判断文件的内容类型,这样即使文件的扩展名被修改为符合要求的扩展名时,只要文件内容类型不符合要求依然无法上传;而FireFox浏览器只是检测文件的扩展名,并不检测文件头的内容,因此当文件扩展名被修改后其无法正确判断其类型。(了解)

5、动态指定错误页面

  在一个Action中在执行不同请求的方法之前都有可能出现错误,且出现错误时要跳转的错误页面也有可能不同,如在SurveyAction中在执行updateSurvey()方法时,可能由于类型转换错误或校验未通过等原因导致错误并且需要跳转到编辑页面便于用户修改,而在调用doAddLogo()方法添加Logo时,可能由于上传图片过大或文件类型不合要求而导致错误并且需要跳转到添加Logo页面便于用户重新添加文件。而出现上述错误时,Struts2都会自动查找配置文件中name="input"的result所指定的错误页面。因此需要动态的指定name="input"的result的值。

  步骤如下:

  Ⅰ、在Action中添加一个字符串变量inputPage:  private String inputPage; //动态错误页指定

Ⅱ、为可能出错的action的方法定义prepare前缀方法,前提是Action实现了Preparable接口。如prepareUpdateSurvey(),prepareDoAddLogo()等,在其中为inputPage赋值。

1 //该方法只在updateSurvey之前运行
2 public void prepareUpdateSurvey(){
3     inputPage = "/editSurvey.jsp" ;
4 }
5
6 //该方法只在updateSurvey之前运行
7 public void prepareDoAddLogo(){
8     inputPage = "/addLogo.jsp" ;
9 }

Ⅲ、在配置文件struts.xml中将action元素中所配置的name=”input“的result的值使用OGNL表达式进行动态指定。

<result name="input">${inputPage}</result>

注:动态指定错误页面的实现原理是利用了Struts2拦截器的执行顺序。由于使用的是Struts2的默认拦截器栈,因此对于这里添加Logo的错误页面的指定使用该方法最合适,不能使用表单的隐藏域,因为params拦截器在prepare拦截器之后才执行;而对于updateSurvey的错误页面的指定则可以放在表单的隐藏域中,因为在拦截器栈中参数的类型转换与校验工作都是在params拦截器之后的拦截器中进行的,此时params拦截器可以为inputPage赋值。切记不能在doAddLogo或updatSurvey方法中再去为inputPage赋值,因为在出错后,将不会在调用Action的业务方法了。

时间: 2024-12-15 01:59:46

调查管理系统 -(8)增加Logo--Struts2文件上传的相关文章

struts2 文件上传下载

四.文件的上传(拦截器)和下载(stream结果类型)(需要练一遍) 1.文件上传 必要前提: a.表单method必须是post: b.enctype取值必须是multipart/form-data: c.提供文件选择域. 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib uri="/struts-t

struts2文件上传下载

文件上传 1.struts2中文件上传介绍 struts2文件上传需要使用apache提供的文件上传组件(commons-fileupload.jar和commons-io.jar). struts2文件上传的核心是通过fileupload拦截器实现的. 2.如何实现文件上传 1>.添加commons-fileupload和commons-io包 2>.在jsp页面做如下配置 将form的method属性值设置为post 给form标记添加属性enctype="multipart/f

struts2文件上传突破2M限制

strutsuploadfileactionclass struts配置文件 [html] view plaincopyprint? 1. <action name="FileUpload" class="cn.timefly.strutsTest.FileUploadAction">   2.     <result name="success">/FileUploadResult.jsp</result> 

如何自学Struts2之Struts2文件上传[视频]

如何自学Struts2之Struts2文件上传[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 由于本次视频没有声音,将会在下节课"Struts2数据库访问"这一节课,一起再讲一下. 注意:不好意思,不知道为什么在这次录制过程中没有声音,很抱歉,本节重点是碰到一个空指针异常,原因是fileUpload这个拦截器要放在其他拦截器之前才没有问题,材料

如何自学Struts2之Struts2文件上传和数据库访问[视频]

如何自学Struts2之Struts2文件上传和数据库访问[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 由于上次视频没有声音,所以在这节课"Struts2数据库访问"一起再讲一下.

struts2学习(13)struts2文件上传和下载(1)

一.Struts2文件上传: 二.配置文件的大小以及允许上传的文件类型: 三.大文件上传: 如果不配置上传文件的大小,struts2默认允许上传文件最大为2M: 2097152Byte: 例子实现: com.cy.action.FileUploadAction.java: package com.cy.action; import java.io.File; import org.apache.commons.io.FileUtils; import com.opensymphony.xwork

Struts2 文件上传 进度条显示

参考成功博客:http://blog.sina.com.cn/s/blog_bca9d7e80101bkko.html 待测试博客:http://blog.csdn.net/z69183787/article/details/52536255 Struts2 文件上传 进度条显示

Struts2之struts2文件上传详解

一.学习案例:通过在uploadfile.jsp页面填写完表单,提交后跳转到success.jsp页面,然后验证upload包下上传文件是否成功. 二.案例分析:struts2文件上传并不是表面上看的只需简单配置就可以上传文件.实际是分为两步的.1.struts2首先将客户端上传的文件保存到struts.multipart.saveDir键所指定的目录,如果该键所对应的目录不存在,就会保存到javax.servlet.context.tempdir环境变量所指定的目录中.2.Action中所定义

【SSH2(实践篇)】--Struts2文件上传下载实例

上篇文章又一次回顾了Struts2的运行机制,对它的运行步骤做了一步步的解析,这个解析不但再一次理清了Struts2的使用方法,而且对它的映射机制进行了深入的解析,并在最后通过一个实例来介绍了Struts2的一种使用方法,这里将做一个有关文件上传下载的实例. 一.文件上传 Struts2并没有提供文件上传的组件,所以想要实现上传的功能就必须通过第三方组件来实现,在Struts2引用的jar中包含了文件上传的组件,它是通过commons-fileupload.jar和commons-io.jar来

struts2文件上传大小限制问题小结

一:首先看一下程序执行中出现的对应报错信息,如下所示: [WARN ] 2015-03-03 15:31:11 :Unable to parse request org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (78871114) exceeds the configured maximum (52428800) a