配置文件:
<action name="download3" class="action.FileDownLoadAction3">
<!-- <param name="inputPath">/upload/struts2中文.txt</param> 这里有中文,在action中getter方法 中,需要转成iso-8859-1 -->
<result name="success" type="stream">
<param name="contentType">${contentType}</param>
<param name="inputName">targetFile</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="buffersize">4096</param>
</result>
<result name="login">/loginForm.jsp</result>
</action>
action:
package action;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class FileDownLoadAction3 extends ActionSupport {
private String fileName;
private String inputPath="/upload/";
public String getFileName() throws UnsupportedEncodingException {
//解决配置文件有中文的乱码
return new String(fileName.getBytes(),"ISO-8859-1");
}
public void setFileName(String fileName) {
try {
//解决url中有中文的乱码
fileName=new String(fileName.getBytes("ISO-8859-1"),"GBK");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.fileName = fileName;
}
public InputStream getTargetFile() throws Exception{
inputPath+=fileName;
return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
ActionContext ctx=ActionContext.getContext();
String user=(String)ctx.getSession().get("user");
if(user!=null&&user.equals("dxl")){
return SUCCESS;
}
this.addActionError("登录后方可允许下载文件");
return LOGIN;
}
}