小弟最近在学习struts2文件下载 遇到个问题!
从前台传递一个文件名称:filename
路径我写死在程序中了!
public String getFilename() {
return filename;
}public void setFilename(String filename) {
try {
String rString = new String(filename.getBytes("iso-8859-1"),"UTF-8");
this.filename=rString;
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public InputStream getTargetFile()throws Exception {
try {
return ServletActionContext.getServletContext()
.getResourceAsStream("\\download" + "\\" + filename);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return null;
}struts.xml--------------------------------<action name="download" class="com.hp.dl.action.DownloadFile">
<result name="tt" type="stream">
<param name="contentType">application/zip;charset=ISO8859-1</param>
<!-- inputName默认值是inputStream,如果action中用于读取下载文件内容的属性名是inputStream,那么可以省略这个参数 -->
<param name="inputName">targetFile</param>
<!--动态获取文件名,从Action中的取得filename-->
<param name="bufferSize">2048</param>
<param name="contentDisposition">attachment;filename=${filename}</param>
</result>
</action>
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
不行啊
workspace中设定的是UTF-8
到底是哪出问题了
<result name="tt" type="stream">
<param name="contentType">application/zip;charset=ISO8859-1</param>
<!-- inputName默认值是inputStream,如果action中用于读取下载文件内容的属性名是inputStream,那么可以省略这个参数 -->
<param name="inputName">targetFile</param>
<!--动态获取文件名,从Action中的取得filename-->
<param name="bufferSize">2048</param>
<param name="contentDisposition">attachment;filename=${filename}</param>
</result>
</action>
你这样写是没错
错的是Struts2对流的处理本身就有bug,
文件下载没有必要非得用Struts2不可,
只要有response就足够解决问题了,