struts2的单文件下载
一、 导入两个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的单文件下载的更多相关文章
- Struts---多文件上传、单文件下载
struts.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUB ...
- 关于struts2中表单提交时,中文乱码问题的解决
http://blog.csdn.net/hjw506848887/article/details/8966194 今天写项目时,突然遇到了struts2中表单提交的中文乱码问题,调了好久就是不知道答 ...
- struts2 表单处理
在这篇教程里我们将探究如何处理表单提交.本文例子介绍: javabean存储表单数据 在action中重写validate方法进行简单的校验 创建一个struts2表单并和javabean匹配 jav ...
- 基于 Struts2 的单文件和多文件上传
文件的上传下载是 Web 开发中老生常谈的功能,基于 Struts2 框架对于实现这一功能,更是能够给我们带来很多的便利.Struts2 已经有默认的 upload 拦截器.我们只需要写参数,它就会自 ...
- servlet文件下载2(单文件下载和批量下载)
使用servlet完毕单文件下载和批量文件下载.批量下载的原理是先将文件打包成zip , 然后再下载. 之前也转载过一篇文件下载的博客,地址:http://blog.csdn.net/ch717828 ...
- Android RxJava2+Retrofit2单文件下载监听进度封装
RxJava2和Retrofit2用的越来越多,最近也在封装一个通用的网络请求库,其中就包括了单文件下载的方法,所以这里进行记录.文末附带Demo 由于网上很多的方法都是使用拦截器进行进度的监听,个人 ...
- 12、Struts2表单重复提交
什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...
- Struts2学习笔记--使用Response下载文件和Struts2的StreamResult文件下载
使用Response下载文件,servlet中的文件下载是通过流来实现的 我在webRoot文件夹下新建了一个文件夹from,里边放了一张图片,这里就以下载这张图片为例:download.jsp很 ...
- struts2表单验证
1:采用手工编写代码实现. 通过继承ActionSupport类,然后重写vlidate方法,validate方法会校验跟execute同样签名的方法,当某个数据校验失败时,我们应该调用addFiel ...
随机推荐
- Spark Pipe使用方法(外部程序调用方法)
写在前面: 1.我们使用的是Hadoop2.2.0,Spark 1.0. 2.这里使用的样例是经典的求pai程序来演示这个开发过程. 3.我们暂时使用java程序来开发,按照需要后面改用scala来开 ...
- HW5.3
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- MSSQL 多个表关联更新
正确写法2):UPDATE A SET A.mobilephone = b.mobile FROM tb_contact A,tmp_contact b WHERE A.contact_name = ...
- Storm与Hadoop的角色和组件比较
Storm与Hadoop的角色和组件比较 Storm 集群和 Hadoop 集群表面上看很类似.但是 Hadoop 上运行的是 MapReduce 作业,而在 Storm 上运行的是拓扑 Topolo ...
- Learning JavaScript Design Patterns The Singleton Pattern
The Singleton Pattern The Singleton pattern is thus known because it restricts instantiation of a cl ...
- POJ#2065. SETI
题目描述 For some years, quite a lot of work has been put into listening to electromagnetic radio signal ...
- php错误级别
E_ERROR 致命的运行错误.错误无法恢复,暂停执行脚本. E_WARNING 运行时警告(非致命性错误).非致命的运行错误,脚本执行不会停止. E_PARSE 编译时解析错误.解析错误只由分析器产 ...
- XML 语法规则
转摘自:http://www.w3school.com.cn/xml/xml_elements.asp XML 语法规则 XML 文档包含 XML 元素. XML 的语法规则很简单,且很有逻辑.这些规 ...
- Cocos2d-x 3.0- 在Visual Studio 2012中执行測试项目
Cocos2d-x - 怎样在Win32执行cpp-tests 2014年4月30日 星期三 小雨 微凉 稍显疲惫 注:本篇文章来自Cocos2d-x官网,小巫仅仅是粗略翻译眼下最新版本号的,教大家怎 ...
- POJ 3670 , 3671 LIS
题意:两题意思差不多,都是给你一个序列,然后求最少需要改变多少个数字,使得成为一个最长不升,或者最长不降子序列. 当然3671是只能升序,所以更简单一点. 然后就没有什么了,用二分的方法求LIS即可. ...