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

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只能看到返回的文件流,并不能出现文件下载提示框。

请教各位高手是什么原因?

------解决方案--------------------
Java code

<!------------文件名: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;
    }
}