package com.lgh.action.admin;

import java.io.File;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Namespaces;
import org.apache.struts2.convention.annotation.Result;

@Namespaces( { @Namespace(value = "/admin") })
public class DownloadAction extends ActionSupport { 
        private String fileName;// 初始的通过param指定的文件名属性
        public InputStream getInputStream() throws Exception { 
            InputStream inputstream = ServletActionContext.getServletContext().getResourceAsStream("/" + fileName);
            return inputstream;
        }  
     
        @Action(value = "/downloadFile", results = { @Result(type = "stream", params = { "contentType", "application/octet-stream;charset=ISO8859-1", "inputName",
                "inputStream", "contentDisposition", "p_w_upload;filename=${downloadFileName}", "bufferSize", "4096" }, name = "download")})
        public String downloadFile() throws Exception {   
            return "download"; 
        }  
     
        public void setFileName(String fileName) { 
            this.fileName = fileName;  
     
        }  
     
        /** 提供转换编码后的供下载用的文件名 */       
        public String getDownloadFileName() {
            String downFileName = fileName;  
            try {  
                downFileName = java.net.URLEncoder.encode(downFileName, "UTF-8");
            } catch (UnsupportedEncodingException e) { 
                e.printStackTrace();  
            }  
              return downFileName;        
        }  
     

}

jsp页面调用
function download(fileName){
    if(fileName == ''){
        alert('下载文件已不存在');
        return false;
    }
    var downUrl = '${basePath?default("../")}admin/downloadFile?fileName=' + fileName;
    open(encodeURI(downUrl));
}

<a href="#" onclick=download("这里是文件名称如“test.zip”")>下载</a>


//参考网站
http://www.wsria.com/archives/1172