热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

需求描述用户浏览页面查看信息,点击按钮下载页面内容并包括页面所带附件的插件打包效果图如下:这里特别说一下,下载的页面与原页面是一样


  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= '' + '' + 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 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";
}

}

推荐阅读
  • 1.man(相当于cmd--help)对不熟悉的命令想查询详细使用方法的帮助解释可以使用eg:manls就可以查看ls相关的用法注: ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 开发中,EXT封装的.NET控件,使用了ExtJsExtenderControl的开源控件,发现个问题,就是每次控件加载,都需要调EXT_ALL.JS文件,600K,导致页面加载很慢。想对这个问题进行 ... [详细]
  • 用SpringBoot实现万能文件在线预览
    推荐一个用SpringBoot搭建的文档在线预览解决方案:kkFileView,一款成熟且开源的文件文档在线预览项目解决方案,对标业内付 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 初级_vue.js初级教程01.简介
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了vue.js初级教程--01.简介相关的知识,希望对你有一定的参考价值。Vue特点 ... [详细]
  • Createdon2014-2-20author:Vincentimporturllib.parseimportgzipimportjsonimportrefromhtt ... [详细]
  • HTTP协议之总结展望篇
    文章目录HTTP2HTTP2内核HTTP3Nginx:高性能的Web服务器OpenResty:更灵活的Web服务器网络应用防火墙(WAF)CDN ... [详细]
  • 传送门上一篇:Day4-前端高频面试题之浏览器相关1、请介绍一下HTTP和HTTPS的区别?HTTPS是在HTTP的基础上加入了SSL协议 ... [详细]
author-avatar
v88v的秋天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有