`
lym6520
  • 浏览: 696117 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

解决Struts2下载中文乱码

阅读更多
struts2的showcase例子中提供了下载文件的例子,这里贴出来看看:

/*
 * $Id: FileDownloadAction.java 496318 2007-01-15 13:58:24Z husted $
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.struts2.showcase.filedownload;

import java.io.InputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;

/**
 * Demonstrates file resource download.
 * Set filePath to the local file resource to download,
 * relative to the application root ("/images/struts.gif").
 *
 */
public class FileDownloadAction implements Action {

    private String inputPath;
    public void setInputPath(String value) {
        inputPath = value;
    }

    public InputStream getInputStream() throws Exception {
        return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
    }

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

}




<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	<package name="filedownload" extends="struts-default" namespace="/filedownload">

        <default-action-ref name="download"/>

        <action name="download" class="org.apache.struts2.showcase.filedownload.FileDownloadAction">
            <param name="inputPath">/images/struts.gif</param>
			<result name="success" type="stream">
                <param name="contentType">image/gif</param>
                <param name="inputName">inputStream</param>
                <param name="contentDisposition">filename="struts.gif"</param>
                <param name="bufferSize">4096</param>
            </result>
        </action>

    </package>
</struts>



可以注意下struts2 xml配置文件中action的param:contentDisposition,其中filename值就是输出的文件名,如果改成中文就会出现乱码,而且可能下载失败,所以这里就需要对filename进行一个特殊的编码转换。

具体处理如下:
首先修改xml文件的action
 <action name="download" class="org.apache.struts2.showcase.filedownload.FileDownloadAction">
            <param name="inputPath">/images/struts.gif</param>
  <param name="filename">下载.gif</param>
			<result name="success" type="stream">
                <param name="contentType">image/gif</param>
                <param name="inputName">inputStream</param>
                <param name="contentDisposition">filename="${filename}"</param>
                <param name="bufferSize">4096</param>
            </result>
        </action>


然后再action中对filename进行一个编码处理:
/*
 * $Id: FileDownloadAction.java 496318 2007-01-15 13:58:24Z husted $
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.struts2.showcase.filedownload;
import java.io.InputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;

/**
 * Demonstrates file resource download.
 * Set filePath to the local file resource to download,
 * relative to the application root ("/images/struts.gif").
 *
 */
public class FileDownloadAction implements Action {

    private String inputPath;
    public void setInputPath(String value) {
        inputPath = value;
    }
    
    private String filename;
    public void setFilename(String filename) {
		this.filename = filename;
	}
    public String getFilename() {
		return filename;
	}

    public InputStream getInputStream() throws Exception {
    	filename = new String(filename.getBytes(),"iso8859-1");
        return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
    }

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

}



引用

filename = new String(filename.getBytes(),"iso8859-1");

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics