页面打包下载功能(包括页面上带的附件)


  1. 需求描述

用户浏览页面查看信息,点击按钮下载页面内容并包括页面所带附件的插件打包效果图如下:
页面打包下载功能(包括页面上带的附件)_第1张图片
这里特别说一下,下载的页面与原页面是一样的。(包含页面的样式也一并下载)
  
  2. 代码展示
  要想把页面下载打包首先要把整个页面的内容包括样式图片下载到临时文件,但是页面的内容怎么传到后台?说一下思路,先把页面拼接成字符串(包括样式)。然后创建iframe,把拼接好的页面塞在里面。再通过下载iframe下载页面。请看代码:
js代码
/**
 * 共享资源查看下载
 */
var lm = _extMask('databox', '数据加载中,请稍候……');
var lmf = _extMask('databox', '正在生成压缩文件,请稍候……');
// 是否进行下载
var flagZip = false;
var titles='';
/**
 * 下载压缩文件
 */
function zipDownload1() {

    if (flagZip) {
        flagZip = false;
    } else {
        return;
    }

    // 准备好HTML
    // _createHtml(title);
    // $("#TEMP_FILE_NAME").val(new Date());

    var url = "/acws.file_download?class=com.huaxin.gxgc.service.balanceaudit.ZipDownloadService";
    url = url + "¶=";
    url = url + "BUSINESSOBJ_TYPE|XMYS";// +pmfiletypelist["678"];
    url = url + "*ZIP_TYPE|5";
    url = url + "*BUSINESSOBJ_ID|" + appId;
    url = url + "*TEMPHTMLPREV|" + htmlFilePrevName;
    lmf.show();

    document.getElementById("fileDownIFrame").src = url;

    var iframeDown = document.all.fileDownIFrame;
    iframeDown.attachEvent("onreadystatechange", function() {
        // 利用状态 判断是否完成ZIP文件处理
        lmf.hide();

        if (iframeDown.readyState === "complete" || iframeDown.readyState == "loaded") {

        }
    });
    setTimeout(function() {
        lmf.hide();
    }, 10000);

}

var htmlFilePrevName = "";// 临时HTML文件的名称
/**
 * 保存HTML
 */
function zipDownload(title) {
    if ($("#htmlCreateIFrame").length == 0) {
        $(document.body).append('');
    }

    htmlFilePrevName = Math.round(Math.random() * 10000000000);
    titles=$("#BEST_CASE_TITLE").html();
    if(titles=='' || titles==null){
        titles=$("#PROBLEM_TITLE").val();
    }
    _createHtml(titles, $("#databox").html(), true);

    document.all.htmlCreateIFrame.src = '/projectweb/pages/common/htmlcreate.html';

    setIframeComplete('htmlCreateIFrame');

    // 设置可以下载压缩文件
    flagZip = true;
}

/**
 * 生成html
 */
var htmlCreateContent; // html的内容
var htmlCreateTitle; // html的内容
function _createHtml(title, contentHtml, flag) {


    var bodyHtml = contentHtml;
    htmlCreateContent = ''</span> + title + <span class="hljs-string">'' + '' + htmlCss() + '' + bodyHtml
            + '';
    htmlCreateTitle = title;


}

/**
 * 定时扫描iframe是否加载完成
 */
function setIframeComplete(iframeName) {
    try {
        if (window.frames[iframeName].document.readyState == "complete" && window.frames['webWordView'].document.readyState == "complete") {
            // 开始生成压缩文件
            validateHtmlFile();
            window.frames[iframeName].doSubmit1(tmlCreateContent, htmlCreateTitle, htmlFilePrevName, "ZIP_DOWN");
        } else {
            setTimeout(function() {
                setIframeComplete('htmlCreateIFrame');
            }, 500);
        }
    } catch (err) {
        if (window.frames[iframeName].document.readyState == "complete") {

            // 开始生成压缩文件
            validateHtmlFile();
            window.frames[iframeName].doSubmit1(htmlCreateContent, htmlCreateTitle, htmlFilePrevName, "ZIP_DOWN");

        } else {
            setTimeout(function() {
                setIframeComplete('htmlCreateIFrame');
            }, 500);
        }
    }
}

/**
 * 判断临时文件是否生成 如果有进行压缩下载
 */
function validateHtmlFile() {
    var inputData = {};
    inputData.HTMLFILEPREVNAME = htmlFilePrevName;
    ACWS.ajax("gxgc/service/balanceaudit/BalanceAudit/ValidateHtmlFile", inputData, function(jso) {
        if (!isNull(jso)) {
            if (jso.EXISTS) {
                zipDownload1();
            } else {
                setTimeout(function() {
                    validateHtmlFile();
                }, 500);
            }
        }
    });
}

判断临时文件是否生成后台处理代码

    /**
     * 检测临时文件是否生成
     * 
     * @param inputData
     * @return
     */
    public HashMap doValidateHtmlFile(HashMap inputData) {
        HashMap outputData = new HashMap();
        outputData.put("EXISTS", false);
        // 生成的临时文件目录
        ZipDownloadService zdService = new ZipDownloadService();
        String sysTempDir = zdService.sysTempPath();// 系统临时文件目录-
        // 临时HTML文件前缀
        String htmlPrevName = MapUtils.getString(inputData, "HTMLFILEPREVNAME", "");
        File fdir[] = new File(sysTempDir).listFiles();
        for (File f : fdir) {
            String fName = f.getName();
            // 临时HTML文件
            if (fName.indexOf(htmlPrevName) > -1) {
                if (f.exists()) {
                    outputData.put("EXISTS", true);
                }
            }
        }
        return outputData;
    }

创建生成页面的模板页面及方法


    
        
        "Content-Type" content="text/html; charset=GBK">
    
    
        
"post" name="htmlFrm"> type="hidden" name="htmlContent" id="htmlContent" /> type="hidden" name="title" id="title" /> type="hidden" name="htmlPrevName" id="htmlPrevName" /> type="hidden" name="DOWN_TYPE" id="DOWN_TYPE" />

下载页面内容附件并打包后台处理



/**
 * 附件下载
 * 
 * @author 
 */
public class ZipDownloadService extends BigFileDownLoadBase {

    public File zip = null;// 全局使用
    public String zipFullPath = "";// 全局使用
    public String fileNameFlag = Security.getUserLoginID();// 文件名特殊标示

    public String htmlPrevName = "";// 临时HTML文件的前缀

    public String zipType = "";//

    String title="";

    /**
     * 释放文件流
     */
    public void afterDownload() {
        // InputStream fileInputStream = super.getFileInputStream();
        // if (fileInputStream != null) {
        // try {
        // fileInputStream.close();
        // } catch (Exception e) {
        // }
        // }
        fileNameFlag = Security.getUserLoginID();
        // 删除生成的临时文件
        String sysTempDir = this.sysTempPath();// 系统临时文件目录-
        File fdir[] = new File(sysTempDir).listFiles();
        for (File f : fdir) {
            String fName = f.getName();
            if (fName.indexOf("sys_") > -1 && fName.indexOf("ljs") > -1 && fName.indexOf(fileNameFlag) > -1) {
                if (f.exists()) {
                    f.getAbsoluteFile().delete();
                }
            }
            // 删除临时HTML文件
            if (fName.indexOf(htmlPrevName) > -1) {
                if (f.exists()) {
                    f.getAbsoluteFile().delete();
                }
            }
        }
    }

    /**
     * 取得文件名、文件类型、文件流
     */
    public void beforeDownload() {
        String params[] = super.getPara().split("\\*");
        HashMap mapParams = new HashMap();
        // 参数处理
        for (String ps : params) {
            String pas[] = ps.split("\\|");
            if (pas.length == 2) {
                mapParams.put(pas[0], pas[1]);
            } else if (pas.length == 1) {
                mapParams.put(pas[0], "");
            }
        }

        // 临时HTML文件前缀
        htmlPrevName = MapUtils.getString(mapParams, "TEMPHTMLPREV", "");
        // 功能模块下载ZIP
        zipType = MapUtils.getString(mapParams, "ZIP_TYPE", "");
        //下载类型
        String D_TYPE = MapUtils.getString(mapParams, "D_TYPE", "");
        String appId = MapUtils.getString(mapParams, "BUSINESSOBJ_ID", "");


        //      
        HashMap outputData = new HashMap();
        // 查询类
        BalanceAuditDao baAuditDao = new BalanceAuditDao();

        //ftp获文件
        AttachmentsDownloadService downloadService = new AttachmentsDownloadService();

        // 附件数据
        List recList =new ArrayList();
//      String title="";
        if("5".equals(zipType)){
             ProjectProblemDao projectProblemDao =new ProjectProblemDao();
             recList=projectProblemDao.getBestRecordList(mapParams);
             BoBestCaseDao boBestCaseDao=new BoBestCaseDao();
             title=boBestCaseDao.getName(appId);
        }else{
            recList= baAuditDao.getRecordList(mapParams);
        }
        if (recList == null) {
            recList = new ArrayList();
        }

        String sysTempDir = this.sysTempPath();// 系统临时文件目录-
        File fdir[] = new File(sysTempDir).listFiles();
        for (File f : fdir) {
            String fName = f.getName();
            // 临时HTML文件
            if (fName.indexOf(htmlPrevName) > -1) {
                if (f.exists()) {
                    HashMap tMap = new HashMap();
                    tMap.put("FILE_FULLPATH_", f.getAbsoluteFile().getAbsolutePath());

                    if ("5".equals(zipType)) {
                        tMap.put("FILENAME", ""+title+".html");// f.getName().replace(htmlPrevName,
                        // "")
                    }

                    recList.add(tMap);
                }
            }
        }

        // 要进行压缩的文件
        File filePaths[] = new File[recList.size()];
        String fileNames[] = new String[recList.size()];
        // 
        // String sysTempDir = this.sysTempPath();// 系统临时文件目录-
        int count = 0;
        for (int i = 0; i < recList.size(); i++) {
            InputStream fileInputStream = null;
            HashMap record = (HashMap) recList.get(i);
            // super.setFileType(MapUtils.getString(record, "FILEEXTENSION",
            // ""));
            String fullPath = MapUtils.getString(record, "FILE_FULLPATH_", "");
            //
            String fileName = MapUtils.getString(record, "FILENAME", "");
            File f = null;// 添加de文件

            fileNameFlag = Security.getUserLoginID() + new Date().getTime();

            if (StringUtils.isBlank(fullPath)) {
                fileInputStream = (InputStream) record.get("FILEOBJECT");
                FileOutputStream fos = null;
                try {
                    f = new File(sysTempDir + "sys_single_ljs_" + fileNameFlag + fileName);

                    // 生成输出对象
                    fos = new FileOutputStream(f);
                    if(null != fileInputStream){
                        // 一次读一个字节
                        int tempbyte;
                        while ((tempbyte = fileInputStream.read()) != -1) {
                            fos.write(tempbyte);
                        }
                        fileInputStream.close();
                    }

                } catch (Exception e) {
                    throw new RuntimeException("文件流读写至单个临时文件失败:" + f.getAbsolutePath());
                } finally {
                    try {
                        if (fos != null) {
                            fos.close();
                        }
                        if (fileInputStream != null) {
                            fileInputStream.close();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            } else {
                // 文件添加
                f = new File(fullPath);
                if(!f.isFile() || !f.exists()){
                    String downloadFile = fullPath.substring(fullPath.lastIndexOf("/") + 1);
                    //通过ftp下载文件实体
                    downloadService.sftp2WebApp(fullPath);
                    String saveFile = sysTempDir+downloadFile;
                    f = new File(saveFile);
                    if(!f.isFile() || !f.exists()){

                    }
                }
            }
            // 如果文件存在
            if (f.isFile() && f.exists()) {
                filePaths[count] = f;
                fileNames[count] = fileName;
            } else {
                filePaths[count] = null;
                fileNames[count] = null;
            }
            count++;
        }
        if (recList != null && recList.size() > 0) {
            File zip = null;
            if (!new File(sysTempDir).isDirectory()) {
                new File(sysTempDir).mkdir();
            }
            zip = new File(sysTempDir + "sys_down_zip_temp_ljs" + fileNameFlag + ".zip");// 压缩文件
            // 生成文件
            FileZip.file2Zip(filePaths, fileNames, zip);
            zipFullPath = zip.getAbsolutePath();
            // 下载的文件源
            // FileInputStream fileInputStream = new
            // FileInputStream(zip.getAbsolutePath());
        }
        outputData.put("FILE_FULLPATH", zipFullPath);// 路径 暂时无使用
    }

    /**
     * 临时文件目录- 根据系统配置文件取得
     * 
     * @return
     */
    public String sysTempPath() {

        Properties PROPERTIES = null;
        // 工程根目录
        URL url = null;
        url = AcwsGlobalProperties.class.getClassLoader().getResource("acws.properties");
        if (url != null) {
            InputStream is;
            try {
                is = url.openStream();
                PROPERTIES = new java.util.Properties();
                PROPERTIES.load(is);
                is.close();
            } catch (IOException e) {
                // 配置文件读取失败
                // e.printStackTrace();
            }
        }

        if (PROPERTIES.get("acws.filedownload.tempPath") != null) {
            // 系统属性
            Properties properties = System.getProperties();
            String osName = properties.getProperty("os.name");
            String tmppath = PROPERTIES.get("acws.filedownload.tempPath").toString();
            if (osName.indexOf("Windows") != -1) {
                if (!tmppath.endsWith("\\")) {
                    tmppath = tmppath + "\\";
                }
            } else {
                if (!tmppath.endsWith("/")) {
                    tmppath = tmppath + "/";
                }
            }
            return tmppath;
        } else {
            throw new RuntimeException("系统acws.filedownload.tempPath读取失败");
        }
    }

    /**
     * 下载文件名
     */
    @Override
    public String getFileName() {
        if ("1".equals(zipType)) {
            return "AAA.zip";}
        else if ("5".equals(zipType)) {
            return title + ".zip";
        }

        return "AAA.zip";
    }

    /**
     * 临时文件全路径
     */
    @Override
    public String getFilePath() {
        return zipFullPath;
    }

    /**
     * 文件类型
     */
    @Override
    public String getFileType() {
        return "zip";
    }

}

你可能感兴趣的:(基础篇,压缩,下载附件打包压缩,附件下载)