Struts2 文件下载及中文乱码问题的解决方案(下载各种格式文件)

本文详细介绍了在Struts2框架下处理文件下载时可能出现的中文乱码问题,以及如何正确设置以实现不同格式文件的正常下载。通过调整配置和编码处理,确保了文件名的正确显示和内容的完整无误。
摘要由CSDN通过智能技术生成

一 struts.xml文件的编辑  
   <struts>  
  <package name="crud-default" extends="convention-default">   
    <action name="download" class="com.myweb.download.DownLoadAction">  
     <!--type 为 stream 应用 StreamResult 处理-->  
    <result name="success" type="stream">   
     <!--默认为 text/plain-->  
     <param name="contentType">application/x-msdownload;charset=ISO8859-1</param>  
     <!-- 默认就是 inputStream,它将会指示 StreamResult 通过 inputName 属性值的 getter 方法,   
比如这里就是 getInputStream() 来获取下载文件的内容,意味着你的 Action 要有这个方法 -->  
     <param name="inputName">inputStream</param>  
     <!-- 默认为 inline(在线打开),设置为 attachment 将会告诉浏览器下载该文件,filename   
指定下载文件时的文件名,若未指定将会是以浏览的页面名作为文件名,如以 download.action 作为文件名 -->  
     <param name="contentDisposition">attachment;filename="${fileName}"</param>  
     <!-- 输出时缓冲区的大小 -->  
     <param name="bufferSize">4096</param>  
    </result>  
    </action>   
   </package>  
</struts>


package com.used.struts2.action;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import com.opensymphony.xwork2.ActionSupport;
import com.used.struts2.bean.UserBean;
import com.used.struts2.utils.ConfigMessages;
import com.used.struts2.utils.CreaterCSV;

public class DownLoadAction extends ActionSupport {
	private static final long serialVersionUID = 2013455583651749435L;
	private final static String DOWNLOADFILEPATH=ConfigMessages.getString("reportServerDir");
	private String filename;
	private List<UserBean> UserBeanList;
	
	
	public String reportCSV(){
		UserBeanList =  getUserList();
		 List<UserBean> list = new ArrayList<UserBean>();
		 for (int i = 0; i < UserBeanList.size(); i++) {
			UserBean job = new UserBean();
         	job.setUserId(UserBeanList.get(i).getUserId());
         	job.setUserName(UserBeanList.get(i).getUserName());
         	job.setTel(UserBeanList.get(i).getTel());
            list.add(job);
         }
		  try {
			filename = ConfigMessages.getString("reportOmnitureFileName");
			CreaterCSV.CreateCsvfiles(ConfigMessages.getString("reportServerDir"), filename, UserBean.getList(), list);
		} catch (Exception e) {
			e.printStackTrace();
		}
		 return SUCCESS;
	}
	
	
	//封装list
	public List<UserBean> getUserList(){
		List<UserBean> userList = new ArrayList<UserBean>();
		
		for(int i=0;i<5;i++){
			UserBean ub = new UserBean();
			ub.setUserId("001"+i);
			ub.setUserName("ADMIN_"+i);
			ub.setTel(123+i);
			userList.add(ub);
		}
		return userList;
	}
	
	
	
	 //从下载文件原始存放路径读取得到文件输出流  
    public InputStream getDownloadFile() {
    		InputStream is = null;
			try {
				is = new FileInputStream(DOWNLOADFILEPATH+filename+".csv");
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
    		  return  is; 
    } 
	
    //如果下载文件名为中文,进行字符编码转换  
    public String getDownloadChineseFileName() {  
        String downloadChineseFileName = filename;  
  
        try {  
            downloadChineseFileName = new String(downloadChineseFileName.getBytes(), "ISO8859-1"); 
        } catch (UnsupportedEncodingException e) {  
            e.printStackTrace();  
        }  
  
        return downloadChineseFileName+".csv";  
    }

	public String getFilename() {
		return filename;
	}

	public void setFilename(String filename) {
		this.filename = filename;
	}

	public static String getDownloadfilepath() {
		return DOWNLOADFILEPATH;
	}
	
	
}


package com.used.struts2.utils;

import java.util.MissingResourceException;
import java.util.ResourceBundle;

/**
 * 读取配置文件
 * @author ADMIN
 *
 */
public class ConfigMessages {
	private static final String BUNDLE_NAME = "configures"; 
	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
	
	private ConfigMessages() {
	}
	
	public static String getString(String key) {
		try {
			return RESOURCE_BUNDLE.getString(key);
		} catch (MissingResourceException e) {
			System.out.println("get properties file error!");
			return null;
		}
	}
	
}


reportServerDir= E\:/workspace/apache-tomcat-6.0.20/webapps/USED_Project/report/




评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值