实现上传功能

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. SQL Server 字符串处理

    ) SET @str='AP-FQC-2014072300004' --获取指定字符第一次出现的位置 SELECT PATINDEX('%-%',@str) --返回:3 --获取指定字符第一次出现的 ...

  2. CUBRID学习笔记 10 数据库文件的类型和含义

    demodb contains the database data; demodb_lgar000, 001 and so forth are log archives used for point ...

  3. CSS笔记(十三)CSS3之过渡

    参考:http://www.w3school.com.cn/css3/css3_transition.asp 通过 CSS3,我们可以在不使用 Flash 动画或 JavaScript 的情况下,当元 ...

  4. SQL.变量、运算符、if、while

    变量: SQL语言也跟其他编程语言一样,拥有变量.分支.循环等控制语句. 在SQL语言里面把变量分为局部变量和全局变量,全局变量又称系统变量. 局部变量: 使用declare关键字给变量声明,语法非常 ...

  5. UIButton(在代码中使用)

    - (void)viewDidLoad { [super viewDidLoad]; // 1.1 创建按钮对象 // UIButton *button = [[UIButton alloc] ini ...

  6. POJ 2484 A Funny Game(神题!)

    一开始看这道博弈题的时候我就用很常规的思路去分析了,首先先手取1或者2个coin后都会使剩下的coin变成线性排列的长条,然后无论双方如何操作都是把该线条分解为若干个子线条而已,即分解为若干个子游戏而 ...

  7. 对List里的对象元素进行排序

    public class Student { private int studentId; private String studentName; private int age; public St ...

  8. 使用命令参数方式指定log4j配置文件

    http://blog.csdn.net/changong28/article/details/39717209 ******************************************* ...

  9. windows多线程框架

    #include <iostream> #include <windows.h> using namespace std; HANDLE hMutex; //public : ...

  10. commonJS — 自定义事件处理(for CustomEvent)

    for CustomEvent github: https://github.com/laixiangran/commonJS/blob/master/src/forCustomEvent.js 代码 ...