实现流下载,使用struts的DownloadAction类非常简单,只需传入所需要的文件名,因考虑中文问题,需要转码将gbk转为iso-8859-1,就不会乱码了,以下是实现代码。
/**/
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.ggs.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/** */ /**
* MyEclipse Struts Creation date: 03-17-2008
*
* XDoclet definition:
*
* @struts.action validate="true"
*/
public class DownloadAction extends org.apache.struts.actions.DownloadAction ... {
@Override
protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception ...{
// TODO Auto-generated method stub
String filename = request.getParameter("filename");
String filepath = "/upload/";
response.setHeader("Content-disposition", "attachment; filename="
+ new String(filename.getBytes("gbk"), "iso8859_1"));// 设置文件名称
StreamInfo si = new ResourceStreamInfo("application/x-msdownload",
this.servlet.getServletContext(), filepath + filename);
return si;
}
}
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.ggs.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/** */ /**
* MyEclipse Struts Creation date: 03-17-2008
*
* XDoclet definition:
*
* @struts.action validate="true"
*/
public class DownloadAction extends org.apache.struts.actions.DownloadAction ... {
@Override
protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception ...{
// TODO Auto-generated method stub
String filename = request.getParameter("filename");
String filepath = "/upload/";
response.setHeader("Content-disposition", "attachment; filename="
+ new String(filename.getBytes("gbk"), "iso8859_1"));// 设置文件名称
StreamInfo si = new ResourceStreamInfo("application/x-msdownload",
this.servlet.getServletContext(), filepath + filename);
return si;
}
}