- 浏览: 43689 次
- 性别:
最新评论
strut.xml:
<action name="download" class="com.telewave.policesystemweb.szrk.DownloadAction" >
<result name="success" type="stream">
<!-- 下载文件类型定义 -->
<param name="contentType">application/octet-stream</param>
<!-- 下载文件输出流定义 -->
<param name="inputName">inputStream</param>
<!-- 下载文件处理方式 -->
<param name="contentDisposition">attachment;filename="${downfilename}"</param>
<!-- 下载文件的缓冲大小 -->
<param name="bufferSize">4096</param>
</result>
</action>
java代码(可见附件):
package com.telewave.policesystemweb.szrk;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.sun.xml.messaging.saaj.packaging.mime.internet.MimeUtility;
/**
* 文件下载
* @author Luxh
*/
public class DownloadAction extends ActionSupport {
private static final long serialVersionUID = -3036349171314867490L;
//文件名
private String fileName;
private String downfilename;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) throws UnsupportedEncodingException {
//用UTF-8重新编码文件名,解决中文乱码
this.fileName = fileName;
}
public String getDownfilename() {
return downfilename;
}
public void setDownfilename(String downfilename) {
this.downfilename = downfilename;
}
public InputStream getInputStream() throws UnsupportedEncodingException, FileNotFoundException{
int i = fileName.lastIndexOf("\\");
String str = fileName.substring(i+1);//截取文件名
HttpServletRequest request = ServletActionContext.getRequest();
String userAgent = request.getHeader("User-Agent");
userAgent = userAgent.toLowerCase();
String filernd = "";
//针对不同浏览器,进行不同的编码,目前支持火狐、谷歌、ie
if (null != userAgent){
if (-1 != userAgent.indexOf("firefox")) {//Firefox
filernd = "=?UTF-8?B?" + (new String(org.apache.commons.codec.binary.Base64.encodeBase64(str.getBytes("UTF-8"))))+ "?=";
}else if (-1 != userAgent.indexOf("chrome")) {//Chrome
filernd = new String(str.getBytes(), "ISO8859-1");
} else {//IE7+
filernd = java.net.URLEncoder.encode(str, "UTF-8");
filernd = StringUtils.replace(filernd, "+", "%20");//替换空格
}
} else {
filernd = str;
}
setDownfilename(filernd);
// IE浏览器可以用以下方式,不通过xml文件<param name="contentDisposition">attachment;filename="${downfilename}"</param>,但是非ie不支持以下这种方式,
// 只能通过xml文件方式读取action中的downfilename
// ServletActionContext.getResponse().setHeader(
// "Content-Disposition",
// "attachment;fileName="+filernd);
// + java.net.URLEncoder.encode(str, "ISO-8859-1"));
InputStream inputStream = new FileInputStream(fileName);
return inputStream;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
<action name="download" class="com.telewave.policesystemweb.szrk.DownloadAction" >
<result name="success" type="stream">
<!-- 下载文件类型定义 -->
<param name="contentType">application/octet-stream</param>
<!-- 下载文件输出流定义 -->
<param name="inputName">inputStream</param>
<!-- 下载文件处理方式 -->
<param name="contentDisposition">attachment;filename="${downfilename}"</param>
<!-- 下载文件的缓冲大小 -->
<param name="bufferSize">4096</param>
</result>
</action>
java代码(可见附件):
package com.telewave.policesystemweb.szrk;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.sun.xml.messaging.saaj.packaging.mime.internet.MimeUtility;
/**
* 文件下载
* @author Luxh
*/
public class DownloadAction extends ActionSupport {
private static final long serialVersionUID = -3036349171314867490L;
//文件名
private String fileName;
private String downfilename;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) throws UnsupportedEncodingException {
//用UTF-8重新编码文件名,解决中文乱码
this.fileName = fileName;
}
public String getDownfilename() {
return downfilename;
}
public void setDownfilename(String downfilename) {
this.downfilename = downfilename;
}
public InputStream getInputStream() throws UnsupportedEncodingException, FileNotFoundException{
int i = fileName.lastIndexOf("\\");
String str = fileName.substring(i+1);//截取文件名
HttpServletRequest request = ServletActionContext.getRequest();
String userAgent = request.getHeader("User-Agent");
userAgent = userAgent.toLowerCase();
String filernd = "";
//针对不同浏览器,进行不同的编码,目前支持火狐、谷歌、ie
if (null != userAgent){
if (-1 != userAgent.indexOf("firefox")) {//Firefox
filernd = "=?UTF-8?B?" + (new String(org.apache.commons.codec.binary.Base64.encodeBase64(str.getBytes("UTF-8"))))+ "?=";
}else if (-1 != userAgent.indexOf("chrome")) {//Chrome
filernd = new String(str.getBytes(), "ISO8859-1");
} else {//IE7+
filernd = java.net.URLEncoder.encode(str, "UTF-8");
filernd = StringUtils.replace(filernd, "+", "%20");//替换空格
}
} else {
filernd = str;
}
setDownfilename(filernd);
// IE浏览器可以用以下方式,不通过xml文件<param name="contentDisposition">attachment;filename="${downfilename}"</param>,但是非ie不支持以下这种方式,
// 只能通过xml文件方式读取action中的downfilename
// ServletActionContext.getResponse().setHeader(
// "Content-Disposition",
// "attachment;fileName="+filernd);
// + java.net.URLEncoder.encode(str, "ISO-8859-1"));
InputStream inputStream = new FileInputStream(fileName);
return inputStream;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
- DownloadAction.rar (1.4 KB)
- 下载次数: 0
发表评论
-
weblogic 控制台密码破解
2016-01-19 14:44 7447原文地址:https://blog.netspi.com/de ... -
java程序中处理一个包含诡异的不可见的字符。
2015-11-17 10:59 1085由于问题字符串粘贴到此编辑里会自动变为空格。在ecplise里 ... -
别让防火墙阻塞了数据库连接
2015-11-09 16:40 618转自:http://www.360doc.com/cont ... -
spring中以dataSource方式使用proxool连接池
2015-01-13 10:37 1002spring中以dataSource方式使用proxool连接 ... -
在web.xml配置监听的类是死循环,导致tomcat不能正常启动解决办法
2015-01-12 10:59 807简单说就是一句话:利用线程,就不会阻止tomcat正常启动 p ... -
Log4j基本使用方法
2014-11-26 10:12 529Log4j基本使用方法 转自:http://blog.csd ... -
EL表达式详解
2014-09-06 11:41 0一、JSP EL语言定义 E L(Expr ... -
利用servlet监听器,系统启动时创建自定义容器简单例子
2014-09-05 09:26 633web.xml加入: <listener> & ... -
webservice简单实例
2014-09-05 09:09 1089webservice简单实例. -
FireFox火狐浏览器下实现javascript提交表单form
2014-08-22 23:35 755FireFox火狐浏览器下实现javascript提交表单fo ... -
多线程_生产者与消费者模式示例
2014-07-29 21:19 0多线程_生产者与消费者模式示例 -
myeclipse10破解工具,非常好用
2014-06-03 21:22 784myeclipse10破解工具非常好用!本人验证成功! 工具原 ... -
java中容器类ArrayList(底层数组实现)和数组存取效率简单测试
2014-05-27 21:29 647ArrayList存取效率和数组的存取效率比较: ArrayL ... -
cookie,session.application三者比较总结:
2014-01-13 16:07 803cookie保存在客户端。 Session保存在服务器端。 a ... -
java中,图片的base64码在js中进行编码传递到后台中再进行解码并生成图片代码示例
2014-01-09 10:36 4060java中,图片的base64编码作为参数从js传递到后台中再 ...
相关推荐
struts2文件下载极其简单struts2文件下载极其简单struts2文件下载极其简单struts2文件下载极其简单
struts2官方文档
使用struts2实现文件下载功能,可以直接运行!
在struts2基础上实现的包括单文件、多文件的上传及下载
struts2文件下载代码demo,一看就会。
http://blog.csdn.net/johnjobs/article/details/8076832博文中附件的下载链接
JavaEE Struts2文件下载
这是一个doc文档,文档中写明了在一个下载的action类中要执行的方法,struts.xml中的配置项,这个文档在于为大家了解下载的流程,建议多写几遍;多改改其中的参数,才能明白怎么用
参考博文:http://blog.csdn.net/u011638419/article/details/41719287
本程序是Struts2文件下载程序实现的文件下载。本程序总共有两种实现方式实现文件下载。动态下载和静态下载。
struts2文件下载(实例)解析
struts2 文件下载需要的架包 commons-fileupload-1.2 commons-io-1.3.2
程序进过本人亲测,附件中含SQL,用的是MySQL数据库,实现了带进度条的多文件上传,并提供下载功能,解压后可直接导入Eclipse,希望对你有所帮助。
MVC Struts2框架搭建,Jquery Ajax异步数据交互,内涵需要的jar包及ppt讲解