struts2多文件动态下载及中文解决方案
作者:yan
Action代码:
package com.xxx.base.view.action; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import com.ruizcon.base.util.MyException; public class DownloadAction extends BaseAction { private String fileName; private String relativePath; public void setFileName(String fileName) throws UnsupportedEncodingException { /* * 对fileName参数进行UTF-8解码,注意:实际进行UTF-8解码时会使用本地编码。 * 这里使用request.setCharacterEncoding解码无效. * 只有解码了getDownloadFile()方法才能在下载目录下正确找到请求的文件 * */ String str=new String(fileName.getBytes("ISO8859-1"),"utf-8"); this.fileName=str; } /** * @getFileName * 此方法对应的是struts.xml文件中的: * <param >attachment;filename="${fileName}"</param> * 这个属性设置的是下载工具下载文件时显示的文件名, * 要想正确的显示中文文件名,我们需要对fileName再次编码 * 否则中文名文件将出现乱码,或无法下载的情况 * @return * @throws UnsupportedEncodingException * @author XieYanZhou(Yan) * @date 2011-6-1 * @version v1.0 */ public String getFileName() throws UnsupportedEncodingException{ String str= new String(fileName.getBytes(), "ISO8859-1"); return str; } public void setRelativePath(String relativePath) throws UnsupportedEncodingException { //this.relativePath = relativePath; String str=new String(relativePath.getBytes("ISO8859-1"),"utf-8"); this.relativePath=str; } /** * * @getDownloadFile * 此方法的命名是有规定的,对应的是struts.xml文件中的: * <param >downloadFile</param> * 返回下载文件的流,可以参看struts2的源码 * @return * @author XieYanZhou(Yan) * @date 2011-6-1 * @version v1.0 */ public InputStream getDownloadFile(){ /*String baseRealPath=this.getSession().getServletContext().getRealPath(""); String path = baseRealPath + relativePath + "//" + this.fileName; path=path.replaceAll("/", ""); FileInputStream fis = new FileInputStream(path); return fis;*/ return this.getServletContext().getResourceAsStream(relativePath +"/"+ fileName); } @Override public String execute() throws Exception { return SUCCESS; } }
xml配置:
<action name="downloadAction" class = "downloadAction"> <result name="success" type="stream"> <!-- <param name="contentType">application/excel,application/vnd.ms-excel</param> --> <param name="contentDisposition">attachment;filename="${fileName}"</param> <param name="inputName">downloadFile</param> <param name="bufferSize">4096</param> </result> </action>
页面调用:
如:
<a href="base/downloadAction.do?relativePath=/userfiles/branchComInvWeekly&fileName=济南20110531184126875.xls">下载</a>
struts2多文件动态下载及中文解决方案相关推荐
- ios动态下载多种中文字体
引言 在今年 WWDC 的内容公开之前,大家都以为 iOS 系统里面只有一种中文字体.为了达到更好的字体效果,有些应用在自己的应用资源包中加入了字体文件.但自己打包字体文件比较麻烦,原因在于: 1.字 ...
- sharepoint 中用自带的download.aspx实现文件的下载,中文文件名编码的问题
//下面代码中的主要是为了将数据绑定到repeater上,同时实现文件的下载,其中dr[3]中的路径绑定的是下载路径,用到了sharepoint中自带的download.aspx下载页面,只要将文件的 ...
- LVGL学习之路——基于lv_lib_freetype库的TTF字体文件动态加载中文字体(阿里普惠字体)
前言 在学习lvgl中,在英文字体上很多人都用过,但是中文字体往往需要靠取模去实现.那么我就在想,如何像windows那样加载动态的字体呢,这样想做多大字体都行.于是就开始了字体的移植. 什么是t ...
- JavaWeb之Servlet学习-----实现文件动态下载功能 手写servlet 手动构建web程序
说明: 本次的任务是将等待下载的文件放在非Web目录下(在web.xml中配置),使客户端无法直接访问待下载 文件.然后通过一个servlet进行中转,如果带下载的文件存在,通过FileInputSt ...
- struts2的文件上传和文件下载
实现使用Struts2文件上传和文件下载: 注意点: (1)对应表单的file1和私有成员变量的名称必须一致 <input type="file" name="fi ...
- 通过js跳转url下载包含中文的文件乱码问题解决方案(java)
通过js跳转url下载包含中文的文件乱码问题解决方案(java) 参考文章: (1)通过js跳转url下载包含中文的文件乱码问题解决方案(java) (2)https://www.cnblogs.co ...
- php header下载中文名称,PHP Header下载文件在IE文件名中文乱码问题
解决PHP Header下载文件在IE文件名中文乱码有两种常见的,一种是是把页面编码改成utf8,另一种是对中文url进入urlencode编码就可以解决了. 解决方案一,我的页面是utf-8编码,代 ...
- 关于使用DataGrid的ButtonColumn,动态添加DataGrid列,实现不定列n个文件的下载功能...
一.使用DataGrid的ButtonColumn,动态添加DataGrid列,实现不定列n个文件的下载功能 在aspx页面中的代码如下: <asp:datagrid id="User ...
- 【struts2】文件上传下载—struts2实现
struts2实现上传下载时要用到的jar包: UploadAction.java(fileupload.action) package com.rczp.action;import java.io. ...
最新文章
- vivado 2018与modelsim的联合仿真
- 逻辑回归模型(Logistic Regression, LR)基础
- Shell脚本中函数的定义和调用笔记
- java显示长度和第一个字符_从Java字符串中以长度1的字符串返回的第一个字母的最佳方法是什么?...
- 中小企业大数据应用之道:思维在于借力
- 在国外千万不要以为别人都听不懂中文
- c语言栈指针移动原理,C指针原理(4)-ATamp;T汇编
- hadoop输出统计
- IE中getElementById的Bug
- Atitit golang开发环境搭建 目录 1. 编辑helo.go	1 1.1. 调试编译	1 2. Ide选择liteide	2 3. 问题解决	2 4. 附录	2 4.1. Go语言标准库常
- 友善之臂Mini2440NORflash bootloader烧写详述---亲测可用
- Maven中的dependencyManagement 详解
- 简单计算经纬度表示的距离
- m3u8加密文件原理及下载脚本
- 用Maxima画出一些有趣的图
- 斯坦福公布3D街景数据集:2500万张图像,8个城市模型 | 下载
- 用MATLAB仿真DSB调制
- VMwarenbsp;vSpherenbsp;ESXiamp;nb…
- RFID出入库管理是如何实施的
- 过年不让放炮,我用Python实现了1000响大地红的特效
热门文章
- QT中动态库和静态库使用
- MFC中Windows窗口消息循环及多线程之间关系
- MFC笔记2(控件位置调整)
- GDI C++ 位图的绘制
- dotNetCharting使用总结
- git add后取消_git 必看,各种撤销操作
- pythonpil模块安装_centos 安装python PIL模块
- js 延迟几秒执行_深入研究 Node.js 的回调队列
- PHP中strtotime函数有范围吗,PHP中使用strtotime函数注意事项
- python中pow_python – 为什么pow(x,y)的时间复杂度为O(1),而x ** y为O(n)?