实现上传功能

Struts2实际上是使用的commons fileupload 组件,所以记得导包哦。

1.首先你应该有一个上传页面

<!-- file的name属性与action中的File类型属性保持一致,用于封装File控件对应的文件内容 -->
<s:file name="upload" label="选择文件"></s:file>

2.然后创建一个文件上传的XXXaction

public class UploadAction extends ActionSupport implements ModelDriven<File> {

    // 封装上传文件属性
private File upload;
// 封装上传文件的类型
private String uploadContentType;
// 封装生成文件名称
private String uploadFileName;
// 获取文件上传的路径
private String savePath; @Override
public String execute() throws Exception {
// 准备一个byte数组
byte[] buffer = new byte[1024];
// 读取文件
FileInputStream fis = new FileInputStream(getUpload());
// 保存文件,并设置保存目录路径
FileOutputStream fos = new FileOutputStream(getSavePath() + "\\"
+ this.getUploadFileName());
int length = fis.read(buffer);
// 循环写入
while (length > 0) {
// 每次写入length长度的内容
fos.write(buffer, 0, length);
length = fis.read(buffer);
}
fis.close();
fos.flush();
fos.close();
return SUCCESS;
}
  public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
  public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
} // 获取上传文件的保存路径
// 通过读取存放目录货的保存路径
public String getSavePath() {
return ServletActionContext.getServletContext().getRealPath(savePath);
}
}

3.然后配置Struts.xml

添加上传的action元素

<!-- 上传文件的action -->
<action name="uploadAction" class="cn.cnsdhzzl.action.UploadAction">
<!-- 通过param参数设置保存目录的路径 -->
<param name="savePath">/upload</param>
<result name="success">uploadSuccess.jsp</result>
</action>

实现下载功能

1.首先你需要有一个下载链接

<-- 指向下载的action逻辑视图名 -->
<a href="downloadAction?fileName=123.jpg">点击下载</a>

2.创建一个下载XXXaction

public class DownloadAction extends ActionSupport {
// 读取下载文件的目录
private String inputPath;
// 下载文件的文件名
private String fileName;
// 下载文件的输入流
private InputStream inputStream;
// 下载文件的类型
private String conetntType; @Override
public String execute() throws Exception {
return SUCCESS;
}
public InputStream getInputStream() throws FileNotFoundException {
String path = ServletActionContext.getServletContext().getRealPath(
inputPath);
return new BufferedInputStream(new FileInputStream(path + "\\"
+ fileName));
}
//省略部分getset
}

3.然后配置Struts.xml

添加下载的action元素

<!-- 下载文件的action -->
<action name="downloadAction" class="cn.cnsdhzzl.action.DownloadAction">
<param name="inputPath">/upload</param>
<result name="success" type="stream">
<!-- 设置文件类型 -->
<param name="contentType">application/image/jpeg</param>
<param name="inputName">inputStream</param>
<!-- 分为两部分,即设置下载处理方式和设置下载文件显示的文件名 -->
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="bufferSize">4096</param>
</result>
<result name="error">error.jsp</result>
</action>

Struts2 实现文件上传和下载的更多相关文章

  1. struts2实现文件上传和下载

    在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来 ...

  2. Struts2的文件上传与下载

    <一>简述: Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUp ...

  3. 【Struts2】文件上传与下载

    一.上传 1.1 Struts2实现步骤 浏览器端 服务器端 1.2 关于Struts2中文件上传细节: 1.3 示例 jsp文件 Action类 struts.xml文件配置 二.下载 2.1 文件 ...

  4. (十五)struts2的文件上传和下载

    文件上传的原理 我们以前学习上传的时候知道需要将表单的enctype属性设置为multipart/form-data. 表单的enctype属性指定的是表单数据的编码方式,有三个值: -applica ...

  5. Struts2之文件上传与下载

    时间:2017-1-11 15:47 --使用commons-fileupload组件上传1.客户端    *   method="post"    *   <input t ...

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

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

  7. Struts2入门(七)——Struts2的文件上传和下载

    一.前言 在之前的随笔之中,我们已经了解Java通过上传组件来实现上传和下载,这次我们来了解Struts2的上传和下载. 注意:文件上传时,我们需要将表单提交方式设置为"POST" ...

  8. 7、Struts2实现文件上传和下载

    一.实现单个文件上传 1.创建如下web项目结构 2.在src下的com.action包下创建UploadAction.java package com.action; import java.io. ...

  9. struts2(六) 文件上传和下载

    前面对文件下载提过一点点,这里正好要讲文件上传,就放在一起在说一遍. --WH 一.单文件上传 在没学struts2之前,我们要写文件上传,非常麻烦,需要手动一步步去获取表单中的各种属性,然后在进行相 ...

随机推荐

  1. struts2——通配符

    struts2的配置文件是 struts.xml.. 在这个配置文件里面可以使用通配符..其中的好处就是,大大减少了配置文件的内容..当然,相应付出的代价是可读性.. 使用通配符的原则是 约定高于配置 ...

  2. 【转+自己研究】新姿势之Docker Remote API未授权访问漏洞分析和利用

    0x00 概述 最近提交了一些关于 docker remote api 未授权访问导致代码泄露.获取服务器root权限的漏洞,造成的影响都比较严重,比如 新姿势之获取果壳全站代码和多台机器root权限 ...

  3. [Java解惑]应用

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. ironpython 2.75 在c#中的使用

    ironpython的介绍请自行搜索. 一句话,python是一个类似lua js的动态预言.ironpython是在net环境执行python的类库. 效果:在网站中调用一个python文件test ...

  5. sar 找出系统瓶颈的利器

    sar 找出系统瓶颈的利器sar是System Activity Reporter(系统活动情况报告)的缩写.sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态.它的 ...

  6. 自定义表单input

    我想实现下面这个效果?应该怎么写最方便呢?最有效,兼容性最好呢 我使用<p>标签套lable,加input的组合,p标签绝对定位,input标签铺满,用padding填充. 主要css . ...

  7. sp_getTable_data

    CREATE PROC sp_Select_Table ) AS begin ) SET @sql='SELECT * FROM ' + @TableName EXEC (@sql) end GO

  8. ip地址的组成(网络位+主机位)

    IP地址子网掩码都是32位的2进制,为了方便记忆转成10进制,通过子网掩码来区分网络位和主机位,子网掩码跟IP地址一一对应,子网掩码为1的是网络位,为0的是主机位.如:192.168.1.2 掩码25 ...

  9. 使用ioctl“实现”自定义的系统调用

    http://www.educity.cn/Linux/1242138.html 最近做的项目跟Linux内核的关系比较大,我们的项目需要在用户态触发一些内核态的代码运行.众所周知,内核态的代码是不能 ...

  10. 关于Java函数传参以及参数在函数内部改变的问题——JAVA值传递与引用最浅显的说明!

    看了很多关于阐述JAVA传参到底是值传递还是引用的问题,有些说得很肤浅让人感觉似懂非懂的感觉,但是好像又能解决一些问题,然后就止步了.还有一些则是,讲得很深奥,看着好像很有道理的样子,但是其实还是没怎 ...