一、文件上传

实现文件上传的方式有很多种,比如Apache的Common-FileUpload,但是实现起来非常的繁琐,而Struts2来实现文件上传则简单的多,默认也是基于Common-FileUpload的方式。

1.使用Struts2来实现文件上传,需要使用Struts2预定义的fileUpload拦截器,defaultStack拦截器栈引用了fileUpload拦截器;最后,struts-default包又将defaultStack拦截器声明为自己的默认拦截器引用。使用defaultStack拦截器栈,也从而引用了fileUpload拦截器

JSP页面

<body><s:fielderror></s:fielderror><form action="upload.action" method="post" enctype="multipart/form-data"><input type="file" name="image"/><br><input type="file" name="image"/><br><input type="submit"><br></form>
</body>

文件上传Action

public class FileUploadAction extends ActionSupport {private static final long serialVersionUID = 1L;private File[] image;private String[] imageFileName;private String[] imageContentType;// 注意必须是xxxFileName,xxxContentType,xxx就是File 对象的引用名@Overridepublic String execute() throws Exception {String fileLocation = "D:\\mytemp";// 指定一个上传文件的存储位置for (int i = 0; i < image.length; i++) {// String fileName =// fileLocation+File.separatorChar+imageFileName[i];File destFile = new File(fileLocation, imageFileName[i]);FileUtils.copyFile(image[i], destFile);System.out.println("上传文件的名:" + imageFileName[i]);System.out.println("上传文件的类型:" + imageContentType[i]);}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;}public String[] getImageContentType() {return imageContentType;}public void setImageContentType(String[] imageContentType) {this.imageContentType = imageContentType;}}

Struts.xml

<struts><constant name="struts.enable.DynamicMethodInvocation" value="false" /><constant name="struts.devMode" value="true" /><constant name="struts.custom.i18n.resources" value="fileupload"></constant>
<!-- 限制上传文件的总大小 --><constant name="struts.multipart.maxSize" value="10485760"></constant><package name="default" namespace="/" extends="struts-default"><action name="upload" class="cn.cil.action.FileUploadAction"><interceptor-ref name="defaultStack"><param name="fileUpload.allowedExtensions">.jpeg,.gif,.bmp,.jpg,.png</param><param name="fileUpload.maximumSize">2097152</param></interceptor-ref><result name="input">/failure.jsp</result><result>/success.jsp</result><result name="fail">/failure.jsp</result></action></package>

注意:配置文件中类似于maximumSize、allowedExtensions的写法,需要根据 fileUpload 拦截器的setter/getter方法,而不是看属性名

在引用fileUpload拦截器的时候,可以指定三个参数(指定<param>子元素):

  • allowedTypes:指定允许上传的文件的类型,如果存在多种类型,以逗号隔开。注意:这里添的不是文件的扩展名,而是对应的ContentType,如果不知道某种文件的ContentType可以先上传一下试试,在后台输出ContentType来。
  • maximumSize:指定允许上传的文件的最大字节数。
  • allowedExtensions:指定允许上传的文件的扩展名。

错误消息配置

应用国际化,自定义错误提示消息

关于name的值可以在struts-core-2.3.15.3.jar中的struts-messages_xx.properties中找到

二、文件下载

使用Struts2来实现文件下载,会用到它的stream类型的Result,这种Result最终会返回一个InputStream,只需要让这个InputStream能读到用户想要下载的文件

struts.xml

    <package name="down" extends="struts-default"><action name="download" class="cn.cil.action.FileDownAction" method="download" ><result name="success" type="stream"><param name="inputName">inputStream</param><param name="contentDisposition">attachment;filename=${fileName}</param><param name="contentType">application/octet-stream</param></result></action></package></struts>

文件下载Action

public class FileDownAction extends ActionSupport {private InputStream inputStream;//定义一个输入流。名字不能为inprivate String fileName;public InputStream getInputStream() {return inputStream;}public void setInputStream(InputStream inputStream) {this.inputStream = inputStream;}public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}public String download() throws Exception{//实现下载:给inputStream赋值String realPath = ServletActionContext.getServletContext().getRealPath("/六6.jpg");//解决中文乱码fileName = URLEncoder.encode(FilenameUtils.getName(realPath),"UTF-8");//System.out.println(fileName);inputStream = new FileInputStream(realPath);return SUCCESS;}public String download1()throws Exception{String realPath = "D:\\mytemp\\456.jpg";fileName = URLEncoder.encode(FilenameUtils.getName(realPath), "UTF-8");inputStream = new FileInputStream(realPath);return SUCCESS;}
}

当然比较坑的是文件名的中文乱码问题

走进Struts2(六)— 文件上传和下载相关推荐

  1. Struts2实现文件上传与下载

    Struts包+源码下载地址:点击打开链接   ,打不开,复制后面 http://struts.apache.org/download.cgi#struts223  ,历史版本:http://arch ...

  2. java struts 读取文件,java中Struts2 的文件上传和下载示例

    文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...

  3. 11、Struts2 的文件上传和下载

    文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...

  4. Struts2文件上传与下载

    2019独角兽企业重金招聘Python工程师标准>>> 本文主要写的是struts2 的文件上传与下载(中文文件名问题的解决).  使用的时候直接在地址栏中输入:http://loc ...

  5. Struts2_3_国际化处理_自定义拦截器_文件上传及下载_OGNL

    Struts2国际化处理 浏览器根据当前的语言环境自动查找对应的语言环境资源包, 使jsp显示合适的语言数据环境 Struts2实现国际化, 动作类必须继承ActionSupport 创建资源包 资源 ...

  6. 十六、Struts2文件上传与下载

    文件上传与下载 1.文件上传前提:<form action="${pageContext.request.contextPath}/*" method="post& ...

  7. struts2完美实现文件上传和下载

    ## struts2完美实现文件上传和下载 ## 第一步:在webx项目lib目录下加入struts.jar包 asm-3.3.jar asm-commons-3.3.jar asm-tree-3.3 ...

  8. struts2 文件上传与下载 (初始文件上传的底层技术)——struts2第七讲

    2019独角兽企业重金招聘Python工程师标准>>> 文件上传 struts2 注:本文系作者在看了浪曦的风中叶老师的struts2视频的个人总结,希望能帮助广大struts2的初 ...

  9. Struts2.3.5+Hibernate3+Spring3.1基于注解实现的多文件上传,下载

    Struts2.3.5+Hibernate3+Spring3.1基于注解实现的的多文件上传,下载,这里是上传文件到数据库中,上传控件可以增加和删除,有需要的朋友可以看看. 以下是源码下载地址:http ...

  10. Struts2之实现文件上传与下载

    当我们用struts2进行文件上传时,首先要将from表单的enctype属性进行重新设置.那么该属性的取值就是决定表单数据的编码方式.一般有三个属性取值: application/x-www-for ...

最新文章

  1. SQL语言之数据控制语言(Oracle)
  2. 02- 流行歌曲 最新热门
  3. redhat linux 5.6安装图解
  4. 安卓开发必须会的技能!浅谈Android消息机制原理,威力加强版
  5. html 手机分辨率,移动端各种分辨率手机屏幕----适配方法集锦
  6. MySql 清空、删除、截断表时1701错误
  7. zabbix之监控mysql云服务
  8. IBM x61 安装 ViaVoice Virtual Audio Cable
  9. PyTorch 模型训练实用教程(附代码)
  10. Go-技篇第二 命名规范
  11. Unity Bound
  12. php读取execl 实例,php读取excel的实例代码
  13. matlab 求特征值的命令,matlab中求解特征值方程函数eig
  14. 人人网市值缩水近80%,究竟发生了什么?
  15. 推荐几本图灵最新移动开发图书
  16. SEOer必读:50个网站推广方法
  17. 钢铁侠是如何练成的(一)
  18. Cygwin warning: could not find /tmp, please create! 问题
  19. java调用腾讯云的乐固加固给apk进行加固处理。
  20. ppt转换图片及有密码情况处理

热门文章

  1. 华为《对话》德勤中国 探索数字经济新机遇、新思路
  2. 沸腾过程气泡成核OVITO渲染
  3. 池馆刷题助手一键答题显示答案综合教程交互英语
  4. python:画无角正方形(效果图+源码)
  5. 多做一点,就吃亏了吗?
  6. LAMP架构:tomcat结合nginx
  7. 小程序源码:强大的万年历微信小程序-多玩法安装简单
  8. 054_er_xiang_yi_tu_sou_tu
  9. 前端JS调用Android相机相册问题解决
  10. Java实现希尔排序