日期:2014-05-17  浏览次数:20704 次

关于struts2下载的文件名是<s:a>标签的action
为什么我用struts2下载文件名字是<s:a>标签提交的action名字。我弄了很久了都没解决第一次发帖希望大神们帮下忙
在线等
下面是代码
 public InputStream getInputStream() throws IOException {
if (user == null || user.getPath() == null) {
return null;
}
File file = new File(ServletActionContext.getServletContext()
.getRealPath(user.getPath()));
return new FileInputStream(file);
}

public String getContentType() {
if (user == null || user.getFilename() == null) {
return null;
}
return ServletActionContext.getServletContext().getMimeType(
user.getFilename());
}

public String getdownloadFilename() throws IOException{
if (user == null || user.getFilename() == null) {
return null;
}
return encodeDownloadFilename(user.getFilename(), ServletActionContext
.getRequest().getHeader("user-agent"));
}
public String encodeDownloadFilename(String filename, String agent)
throws IOException {
if (agent.contains("Firefox")) { // 火狐浏览器
filename = "=?UTF-8?B?"
+ new BASE64Encoder().encode(filename.getBytes("utf-8"))
+ "?=";
} else { // IE及其他浏览器
filename = URLEncoder.encode(filename, "utf-8");
}
return filename;
}

下面是struts,xml的配置
<result name="downloadOk" type="stream">
<!-- 获得2个消息表头-->
<param name="contentType">${contentType}</param>
<param name="contentDisposition">attachment;filename=${downloadFilename}</param>


补充下我在控制台取出的文件名是上传时候的文件名
------解决方案--------------------
你确定你获取文件名的方法是正确的吗,URLEncoder.encode();这方法是获取文件名吗?下载文件的文件名跟上传以后的文件名是一致的,你先看看你上传到服务器的文件的文件名是什么样的吧,没遇见过这样的问题,纯属个人看法,坐等大牛解决问题!