使用struts2实现下载功能遇到的文件中文问题

转自:http://blog.csdn.net/u011128219/article/details/51119798

今天在做一个项目,使用了struts2实现了一个下载的功能。
当在页面点击下载之后,就报错了。
一开始我就怀疑是不是文件名中文的问题,于是乎,我把文件名改成了英文的。
Bingo!果然可以正常下载了。
那么说我的怀疑是正确的,然后开始想办法解决问题了。
先从我的下载的链接的传值那里开始入手,我的下载链接是这样的:
<a href="download.action?name=通信原理(第6版)-樊昌信.pdf" />">下载</a>

记得如果是URL传值的话,默认编码格式为:iso-8859-1
所以我在action接收这个“name”值时,用了一下的语句进行转码:
name = new String(name.getBytes("ISO-8859-1"), "UTF8");

然后再去重启项目,含有中文名的文件的下载也可以了。
但是,在下载的窗口还是不能显示中文名,只是能下载。
下载完后需要将名称及后缀名修改跟原来的一样才可以正常使用这个下载的文件。
然后我去网上查了一下资料,网上的方法是:在将“name”的值传递到页面的下载框中,需要将“name”值得编码再转回来:
name = new String(name.getBytes(), "ISO8859-1");

这次终于在下载框也可以正常显示中文名字了。
至此,关于下载功能的文件中文的问题成功解决了。
附上我的DownloadAction代码:
public class DownloadAction extends ActionSupport {

    private String name;

    public String getName() throws UnsupportedEncodingException {
        name = new String(name.getBytes(), "ISO8859-1");
        return name;
    }

    public void setName(String name) throws UnsupportedEncodingException {
        name = new String(name.getBytes("ISO-8859-1"), "UTF8");
        this.name = name;
    }

    public InputStream getDownloadFile() throws Exception {
        InputStream in = ServletActionContext.getServletContext()
                .getResourceAsStream("OnlineCourse//" + name);

        return in;
    }

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }
}

struts.xml配置文件部分配置:
<struts>
<action name="download" class="action.DownloadAction">
            <result name="success" type="stream">
                <param name="contentDisposition">attachment;filename="${name}"</param>
                <param name="inputName">downloadFile</param>
                <param name="bufferSize">1024</param>
            </result>
        </action>
    </package>
</struts>

说明:
<param name="contentDisposition">attachment;filename="${name}"</param>

这句话是设置在下载框显示的名字
${name}获取DownloadAction的name值
<param name="inputName">downloadFile</param>

此标签的值必须是DownloadAction里面的getDownloadFile方法名去掉get和将首字母小写的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值