一、 导入两个jar包

  commons-fileupload-1.3.1.jar

  commons-io-2.4.jar

二、编写请求上传jsp

<h1>文件列表--单文件</h1>
<div>
<span>
<img alt="" src="/imgs/${fileFileName }" width="100">
</span>
<a href="upload_download/download_file.action?filename=${fileFileName }">download</a>
</div>

三、编写action

package com.struts2.fileuplad.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import com.struts2.util.BaseAware;
public class FileDownloadAction extends BaseAware {
private static final long serialVersionUID = 9084172624901427828L;
private String filename;
//该方法会被对应的请求action中result的参数调用
public String getFilename() {
return filename ;
}
public void setFilename(String filename) throws UnsupportedEncodingException {
this.filename = filename;
}
@Override
public String execute() {
return SUCCESS;
}
//该方法被对应的请求action中result的参数调用
//即:<param name="contentDisposition">attachment;fileName="${downloadFileName}"</param>
public String getDownloadFileName() throws UnsupportedEncodingException{
//使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
// 构造一个新的 String,运用指定的字符集解码指定的字节数组。
//这里本该设置为UTF-8 但是IE依然显示乱码 换成GBK之后基本可以全部兼容了,有问题可以再修改
return this.filename = new String(filename.getBytes("GBK"),"ISO-8859-1");
}
private HttpServletRequest request;
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
//该方法被对应的请求action中result的参数调用
//即:<param name="inputName">inputStream</param>
public InputStream getInputStream() throws FileNotFoundException, UnsupportedEncodingException {
String fileapath = request.getServletContext().getInitParameter("struts2_upload_imgs_path") ;
File file = new File(fileapath + File.separator + filename);
FileInputStream fis = new FileInputStream(file);
return fis;
}
}

四 、 配置struts.xml

<!-- 其中主要使用的参数是:
contentType 指定下载文件的文件类型 —— application/octet-stream 表示无限制
inputName 流对象名 —— 比如这里写inputStream,它就会自动去找Action中的getInputStream方法。
contentDisposition 使用经过转码的文件名作为下载文件名 —— 默认格式是attachment;filename="${fileName}",将调用该Action中的getFileName方法。
该项目中调用的是getDownloadFileName()方法
bufferSize 下载文件的缓冲大小 -->
<action name="download_file" class="com.struts2.fileuplad.action.FileDownloadAction">
<result type="stream">
<param name="contentType">application/octet-stream</param>
<param name="contentDisposition">attachment;fileName="${downloadFileName}"</param>
<param name="inputName">inputStream</param>
<param name="bufferSize">1024</param>
</result>
</action>

struts2的单文件下载的更多相关文章

  1. Struts---多文件上传、单文件下载

    struts.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUB ...

  2. 关于struts2中表单提交时,中文乱码问题的解决

    http://blog.csdn.net/hjw506848887/article/details/8966194 今天写项目时,突然遇到了struts2中表单提交的中文乱码问题,调了好久就是不知道答 ...

  3. struts2 表单处理

    在这篇教程里我们将探究如何处理表单提交.本文例子介绍: javabean存储表单数据 在action中重写validate方法进行简单的校验 创建一个struts2表单并和javabean匹配 jav ...

  4. 基于 Struts2 的单文件和多文件上传

    文件的上传下载是 Web 开发中老生常谈的功能,基于 Struts2 框架对于实现这一功能,更是能够给我们带来很多的便利.Struts2 已经有默认的 upload 拦截器.我们只需要写参数,它就会自 ...

  5. servlet文件下载2(单文件下载和批量下载)

    使用servlet完毕单文件下载和批量文件下载.批量下载的原理是先将文件打包成zip , 然后再下载. 之前也转载过一篇文件下载的博客,地址:http://blog.csdn.net/ch717828 ...

  6. Android RxJava2+Retrofit2单文件下载监听进度封装

    RxJava2和Retrofit2用的越来越多,最近也在封装一个通用的网络请求库,其中就包括了单文件下载的方法,所以这里进行记录.文末附带Demo 由于网上很多的方法都是使用拦截器进行进度的监听,个人 ...

  7. 12、Struts2表单重复提交

    什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...

  8. Struts2学习笔记--使用Response下载文件和Struts2的StreamResult文件下载

    使用Response下载文件,servlet中的文件下载是通过流来实现的   我在webRoot文件夹下新建了一个文件夹from,里边放了一张图片,这里就以下载这张图片为例:download.jsp很 ...

  9. struts2表单验证

    1:采用手工编写代码实现. 通过继承ActionSupport类,然后重写vlidate方法,validate方法会校验跟execute同样签名的方法,当某个数据校验失败时,我们应该调用addFiel ...

随机推荐

  1. 如何处理alert、confirm、prompt对话框

    import java.io.File; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.ope ...

  2. Curl之Post Json

    curl Post Json $ curl -i -X POST -H "'Content-type':'application/x-www-form-urlencoded', 'chars ...

  3. 洛谷P1189 逃跑的拉尔夫(SEARCH)

    洛谷1189 SEARCH 题目描述 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是那辆车属于警察局,并且车上装有用于发射车子移动路线的装置. 那个装置太旧了,以至于只能发射关于那辆车的 ...

  4. 洛谷P1117 棋盘游戏

    洛谷1117 棋盘游戏 题目描述 在一个4*4的棋盘上有8个黑棋和8个白棋,当且仅当两个格子有公共边,这两个格子上的棋是相邻的.移动棋子的规则是交换相邻两个棋子.现在给出一个初始棋盘和一个最终棋盘,要 ...

  5. 如何在编译Xcode-Plugin工程的时候增加Cocoapods依赖

    关于如何在编译Xcode-Plugin工程的时候增加Cocoapods依赖 以及在Mac App上使用Cocoapods的时候遇到Library not found for -lPods时的解决办法 ...

  6. BZOJ1997 [Hnoi2010]Planar (2-sat)

    题意:给你一个哈密顿图,判断是不是平面图 思路:先找出哈密顿图来.哈密顿回路可以看成一个环,把边集划分成两个集合,一个在环内,一个在外.如果有两条相交边在环内,则一定不是平面图,所以默认两条相交边,转 ...

  7. 微软的无限存储空间-OneDrive

    10 月 28 日消息,微软今天宣布为所有 Office 365 的用户提供无上限的云存储服务,也就是 OneDrive 存储空间将从目前的 1TB 变成无上限,而且无需支付额外费用.这意味着曾经困扰 ...

  8. cs编写php字符显示问题

    1.  mysql中有mysql字符,数据库字符(各个数据库字符可不同),数据库下的表字符,表的字段字符,这些字符应保持一致具体查询命令可见网上,如不同要设置成相同才行. 2.  因为浏览器版本不同所 ...

  9. HDOJ-ACM1097(JAVA) A hard puzzle

    这道题就是HDOJ的1061的变形: 1061 :求n的n次方的个位数 http://www.cnblogs.com/xiezie/p/5596779.html 1097 :求n的m次方的个位数 因此 ...

  10. POJ-3648 Wedding 2sat

    题目链接:http://poj.org/problem?id=3648‘ 题意:一对情人举行婚礼,有n对夫妇参加,别人对着坐在一个长桌子的两边,新娘和新郎坐在最后面,新娘只能看见坐在他对面的人.现在, ...