} } }

    struts2文件

    添加时间:2013-5-17 点击量:

    http://elf8848.iteye.com/blog/640964


    http://elf8848.iteye.com/blog/275823


    struts2.xml设备:



    1         <action name=ExportDB class=edu.xjtu.sei.xxxx.action.DBManager.ExportDBAction>
    
    2 <result name=success type=stream>
    3 <param name=contentType>application/octet-stream</param>
    4 <param name=inputName>inputStream</param>
    5 <param name=bufferSize>409600</param>
    6 <param name=contentDisposition>attachment;filename=¥{filename}</param>
    7 <param name=></param>
    8 </result>
    9 </action >



    ExportDBAction.java



    import java.io.BufferedReader;
    
    import java.io.ByteArrayInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.Iterator;
    import java.util.List;

    import org.apache.struts2.json.annotations.JSON;
    import com.opensymphony.xwork2.ActionSupport;

    import edu.xjtu.sei.xxx.business.dao.HostInfectDAO;
    import edu.xjtu.sei.xxx.util.DateUtils;

    public class ExportDBAction extends ActionSupport{
    String filename;
    String flag;
    String errormessage;
    String properties;

    private HostInfectDAO hostinfectdao;
    public void setHostInfectDAO(HostInfectDAO hostinfectdao) {
    this.hostinfectdao = hostinfectdao;
    }

    public String getProperties() {
    return properties;
    }
    public void setProperties(String properties) {
    this.properties = properties;
    }
    boolean success;
    public String execute() {

    success
    =true;
    return SUCCESS;

    }
    public String getFilename() {
    return filename;
    }
    public void setFilename(String filename) {
    this.filename = filename;
    }
    public String getFlag(){
    return flag;
    }
    public void setFlag(String flag){
    this.flag=flag;
    }
    public String getErrormessage() {
    return errormessage;
    }
    public void setErrormessage(String errormessage) {
    this.errormessage = errormessage;
    }
    public boolean isSuccess() {
    return success;
    }
    public void setSuccess(boolean success) {
    this.success = success;
    }
    public InputStream getInputStream() throws IOException {
    List results
    =null;
    StringBuilder export
    =new StringBuilder();
    results
    =hostinfectdao.getExportDB(flag);
    export.append(
    IP,域名,时候+\n);
    for (Iterator iter = results.iterator(); iter.hasNext();) {
    Object[] row=(Object[]) iter.next();
    String ip
    =row[0].toString();
    String dns
    =row[1].toString();
    String time=DateUtils.formatDateEx((Date)row[3]).toString();
    export.append(ip
    +,+dns+,+time+\n);
    }
    ByteArrayInputStream stream = new ByteArrayInputStream(export.toString().getBytes(gbk));
    return stream;

    }

    public static void main(String args[]) throws IOException{
    ExportDBAction a
    =new ExportDBAction();
    a.setProperties(
    1);
    a.getInputStream();
    }
    }



    恳求action的js函数:



    function exportTable(filename,flag){
    
    //window.location.href
    = ExportDB.action?filename=+filename+.csv&flag=+flag+&contentType=application/octet-stream;
         window.location.href = ExportDB.action?filename=+filename+.csv&flag=+flag;
    }


    之前IE浏览器的时辰一向主动打开文件。
    那时struts.xml里的<param name=contentDisposition>attachment;filename=¥{filename}</param>


    是如许写的:<param name=contentDisposition>filename=¥{filename}</param>


    后来把attachment加上就好了。


    参考文章说的很清楚:


    要直接一个文件,我们须要做两件事,


    第一件事是:设定响应的内容类为“application/octet-stream”,大小写无关。


    第二件事是:设置HTTP的响应头名字为:Content-Disposition,设定值为:attachment;   filename   =   theFileName。这里的theFileName就是呈如今文件对话框里的默认文件名,凡是和所的文件名字雷同,但也可以不合。


    jsp页面的实现代码:


    html代码:



          <%  
    
    // 获得文件名字和路径
    String filename = MengxianhuiDocTest.doc;
    String filepath
    = D:\\;

    // 设置响应头和保存的文件名
    response.setContentType(APPLICATION/OCTET-STREAM);
    response.setHeader(
    Content-Disposition
    attachment; filename=\ + filename + \);

    // 打开指定文件的流信息
    java.io.FileInputStream fileInputStream =
    new java.io.FileInputStream(filepath + filename);

    // 写出流信息
    int i;
    while ((i=fileInputStream.read()) != -1) {
    out.write(i);
    }
    fileInputStream.close();
    out.close();
    %>



    所有随风而逝的都属于昨天的,所有历经风雨留下来的才是面向未来的。—— 玛格丽特·米切尔 《飘》
    分享到: