日期:2014-05-16  浏览次数:20654 次

Ext+struts2如何实现文件下载
我前台用的是Ext的Grid来展示文件列表, 服务端是用Struts2,现在想让用户选中一个文档后点下载按钮就能实现文档下载功能。数据库里放的是文档的名称和路径,文档的实际路径在c盘某个目录中,请问如何实现下载。

我再struts配置文件中
 <action name="DownLoadDocument" class="DocumentAction" method="downLoadDocument">
<result type="stream">
  <param name="inputName">inputStream</param>
              <param name="contentType">application/x-msdownload;charset=utf-8</param>
              <param name="contentDisposition">attachment;filename="hello"</param>
              <param name="bufferSize">15097152</param>
              
</result>
</action>
可是返回时用firefox只能看到返回的文件流,并不能出现文件下载提示框。

请教各位高手是什么原因?
------解决方案--------------------

<!------------文件名:DownLoadAction.java ------------------>
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class DownLoadAction extends ActionSupport {
//下载文件原始存放路径
private final static String DOWNLOADFILEPATH="/upload/";
//文件名参数变量
private String fileName;

public String getFileName() {
return fileName;
}

public void setFileName(String fileName) {
this.fileName = fileName;
}

//从下载文件原始存放路径读取得到文件输出流
public InputStream getDownloadFile() {
return 
ServletActionContext.getServletContext().getResourceAsStream(DOWNLOADFILEPATH+fileName);
}
//如果下载文件名为中文,进行字符编码转换
public String getDownloadChineseFileName() {
String downloadChineseFileName = fileName;

try {
downloadChineseFileName = new String(downloadChineseFileName.getBytes(), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

return downloadChineseFileName;
}

public String execute() {
return SUCCESS;
}
}