struts2已经有包装好的文件上传下载组件,非常方便。看源代码,红色标记的就是文件上传的拦截器

接下来我们再来看看这个拦截器的源码,下面标记的三个参数,仔细看注释,

但是配置文件并不包括配置画红线的那两个参数,继续看源码注释的例子:

看到下划线标记红色的三个参数了吗?那三个才是可以用配置文件注入的属性。
分别是:maximumSize、allowedTypes 和 allowedExtensions

文件下载的话,我们只要按照二进制流输出就行,struts2也有包装好的返回类型给我们使用,看源码

源码中有好几个参数,我们只要设置三个参数就可以了,分别是contentType、contentDisposition和inputStream

好了源码就分析到这,下面开始实现:
静态页面:

<%@ page language="Java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %>
<%String path = request.getContextPath();String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+ path + "/";
%>
<!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>">
<title>标题</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<!-- <s:form/>默认是post -->
<s:form action="/upload/upload" enctype="multipart/form-data"><s:textfield name="username" label="username"></s:textfield><s:file name="file" label="file"></s:file><s:submit value="submit"></s:submit>
</s:form>
<hr>
<a href="${pageContext.request.contextPath }/upload/download">下载</a>
</body>
</html>

action类:

package cn.jieou.struts.action;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class FileUploadAction extends ActionSupport{/*** */private static final long serialVersionUID = 1L;private String username;private File file;//上传的文件private String fileFileName;//上传文件的名字private String fileContentType;//上传组件MIME类型private String fileName;//下载的文件名private InputStream inputStream;//输入流public String upload(){/*** 这里指定一个相对路径,但实际开发中都会指定一个绝对路径来存放文件,* 绝对路径可以在配置文件中存放,便于修改,以防重新部署项目时文件丢失。*/String dir = ServletActionContext.getServletContext().getRealPath("/WEB-INF/files");File newfile = new File(dir);if(!newfile.exists()){newfile.mkdirs();}else {try {//把文件复制的指定目录下FileUtils.copyFile(file, new File(newfile, fileFileName));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return SUCCESS;}public String download(){String filepath = ServletActionContext.getServletContext().getRealPath("/WEB-INF/files");File downloadfile = new File(filepath,"图像 2.png");try {inputStream = new FileInputStream(downloadfile);fileName = "MJ.png";} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}return "download";}public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}public InputStream getInputStream() {return inputStream;}public void setInputStream(InputStream inputStream) {this.inputStream = inputStream;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public File getFile() {return file;}public void setFile(File file) {this.file = file;}public String getFileFileName() {return fileFileName;}public void setFileFileName(String fileFileName) {this.fileFileName = fileFileName;}public String getFileContentType() {return fileContentType;}public void setFileContentType(String fileContentType) {this.fileContentType = fileContentType;}
}

配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
<struts><package name="cn.jieou.struts.action.FileUploadAction" extends="struts-default" namespace="/upload"><action name="upload" class="cn.jieou.struts.action.FileUploadAction"  method="upload"><interceptor-ref name="defaultStack"><!-- 允许上传文件最大值;单位字节 --><param name="fileUpload.maximumSize">1048576</param><!-- 允许上传文件的MIME类型;这里指定允许图片的所有类型 --><param name="fileUpload.allowedTypes">image/*</param><!-- 允许上传文件的拓展名;这里指定jpg,png和gif--><param name="fileUpload.allowedExtensions">jpg,png,gif</param></interceptor-ref><result name="success">/success.jsp</result><result name="input">/upload.jsp</result></action><action name="download" class="cn.jieou.struts.action.FileUploadAction"  method="download"><result name="download" type="stream"><!-- action中的输入流名字 --><param name="inputStream">inputStream</param><!-- 重写请求头;这里最好不要写死,接收action --><param name="contentDisposition">attachment;filename=${fileName}</param><!-- 设置响应头中的MIME类型 --><param name="contentType">application/octet-stream</param></result></action></package>
</struts>

说明:有时候xml配置文件配置1048576未必会生效,最好可以在struts.properties文件配置struts.multipart.maxSize=1048576,效果是一样,当然配置一种就行,建议使用后面properties配置,是全局配置。

多文件上传
只需要在后台用数组接收即可,例如:

然后在循环数组复制文件到指定位置。

struts2文件上传和下载相关推荐

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

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

  2. Struts2文件上传与下载

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

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

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

  4. struts2文件上传,下载

    目录 1. 页面表单 2. 上传下载实现 1. 页面表单 <HTML><HEAD><TITLE>上传下载图片</TITLE><meta http- ...

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

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

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

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

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

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

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

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

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

    在电脑前坐了一天,看看这个看看那个,也没什么意思,就翻一翻以前培训时的课件,整理整理全当做复习了. 当我们用struts2进行文件上传时,首先要将from表单的enctype属性进行重新设置.那么该属 ...

最新文章

  1. mysql多租户schema复制,Asp.net core下利用EF core实现从数据实现多租户(3): 按Schema分离 附加:EF Migration 操作...
  2. 网传的 Spring 大漏洞
  3. php和python哪个学起来简单一点-python和php哪个容易学
  4. Spring Cloud构建微服务架构(七)消息总线(续:Kafka)
  5. 2021-03-20 包含生成树的性质
  6. linux 网络通讯 命令,Linux—网络通讯管理命令
  7. 牛客 - 树上求和(贪心+树形dp)
  8. php 关闭oracle,CSS_ORACLE启动和关闭实例,实例启动和关闭:一.数 - phpStudy
  9. 计算机管理系统绪论,数据库系统概论 第一章 绪论
  10. python全屏模式 spider_我可以使用PIL以全屏模式显示图像吗?
  11. 1.LeetCode字符编辑距离
  12. 小白的java学习之路 “ 选择结构(一)”
  13. 8086微型计算机结构功能,3.2 8086微处理器的功能结构
  14. css3直线运动_纯CSS3炫酷元素边框线条动画特效
  15. October CMS - 快速入门 2 基本概念
  16. 论文阅读:Instance Weighting in Dialogue Systems
  17. 杀戮空间2服务器协议,杀戮空间2 云服务器搭建
  18. Bloglink list
  19. 什么是JSONP协议 及对JSONP的改进
  20. 求心理阴影的面积 (题目出自:陈越-浙江大学)

热门文章

  1. 01-android 微信实现本地视频发布到朋友圈功能
  2. 【发布】哔哩哔哩bilibili替换旧版播放(稍后再看)
  3. 几十年前的老旧照片如何修复?还不知道旧照片怎么恢复清晰吗?
  4. 算法笔记 : 透视变换(透射变换)
  5. 无法计算机您系统的体验指数,win7无法计算机您系统的windows体验指数如何解决...
  6. java计算机毕业设计小区失物招领网站源程序+mysql+系统+lw文档+远程调试
  7. AD7606分析讲解
  8. iphonex 电话没声音 免提却有声音
  9. Excel批量设置数字转化成“以文本形式存储的数字”
  10. 无线充电设计(二)-方案设计