关于word:五种-WordPress-备份你真的清楚吗

WordPress 备份实质上是您的 WordPress 网站在任何工夫点的正本。简而言之,WordPress 备份是WordPress 数据库和放弃网站失常运行所需的所有文件(包含主题、插件和任何上传的媒体)的全功能正本。 如果您的网站因任何起因损坏或失落,备份整个网站将使您可能立刻将网站复原到解体或被毁坏之前的某个工夫点。 WordPress 备份有哪些不同类型?您的 WordPress 站点由几个不同的重要组件组成,包含数据库、主题、插件、WordPress 外围文件和您的媒体库。出于多种起因,独自备份所有这些局部可能很有用。 1.残缺(残缺)备份这种类型的备份蕴含与您的 WordPress 装置相干的所有内容,因而在您首次装置备份插件之后运行这种类型的备份十分重要。 请记住,这种类型的备份可能是一个更大的文件,具体取决于您网站的总大小。 残缺的备份包含您网站上的所有这些内容: 页数帖子小部件评论主题文件插件文件主题和插件设置媒体库文件WordPress 设置WordPress数据库WordPress 外围文件用户自定义帖子类型类别和标签JPG、JPEG、PNG、PDF 文件等WooCommerce 产品、交易、销售等。一旦生成残缺备份,您就能够下载一个 zip 文件。您能够观看 BackupBuddy 的工作,因为它会备份您的文件、数据库、压缩备份并验证备份的完整性。 何时应用残缺备份: 残缺备份应该是您的“默认”备份类型。残缺备份会捕捉您 WordPress 网站中蕴含的所有文件,因而不会脱漏任何内容。如果您须要复原整个网站,则须要残缺备份。请留神,这些类型的备份文件可能十分大,尤其是取决于您的媒体库文件。如果有限度,请务必留神备份存储空间的应用状况。 另请留神,残缺(残缺)备份在更改 web whosts 时尤为重要,六翼倡议依据您上传新媒体或增加/降级插件和主题的频率进行残缺备份,对于沉闷站点每周一次,对于不太沉闷的站点每两周一次。 2.数据库备份咱们常说“WordPress 站点只是一个有脸的数据库”。这意味着 WordPress 应用 MySQL 数据库来存储您网站的大部分重要组件,包含您的帖子内容、用户、评论、类别和标签、设置、链接等。 仅数据库备份备份您的 WordPress 数据库,对可用存储空间或服务器性能的影响较小。备份 WordPress 数据库,能够包含: 帖子页数评论小部件内容媒体题目和形容(但不是媒体文件)WordPress 设置信息留神:重要的是要留神您的数据库不包含,例如您的媒体库上传以及主题和插件文件。 如果您想要更多技术列表,这里有一个规范数据库备份中蕴含的所有数据库表的列表。 wp_postmetawp_postswp_用户wp_usermetawp_termswp_termmetawp_term_taxonomywp_term_relationshipswp_选项wp_链接wp_评论wp_commentsmeta留神:您应用的插件可能会增加其余数据库表。 何时应用数据库备份:数据库备份是残缺备份的“ 精简版”,因为它只蕴含您的 WordPress 站点的数据库。如果您能够确认对您的网站所做的惟一更改是在帖子、页面或评论中,请应用这种类型的备份。(请留神,此类备份不蕴含您的 WordPress 媒体库,因而不会捕捉任何上传的图像。) 咱们倡议每周执行一次仅数据库备份以备份您的数据库,因为您的数据库比您的文件和文件夹更频繁地更改。 3.仅插件备份接下来的三种备份类型是不言自明的。仅插件类型的备份会备份所有插件文件,无论插件是否处于活动状态。 备份实现后,备份的 zip 文件下载会显示所有内容。每个插件都有本人的文件夹。 何时应用仅插件备份: 这种类型的备份对于在更新插件之前运行十分有用,因为插件的先前版本将被保留,以备您须要复原时应用。 4.仅主题备份仅主题类型的备份就像它听起来的那样……备份您站点上装置的所有主题,无论它们是否处于活动状态。 备份实现后,备份的zip文件下载会显示所有内容。您网站上装置的每个主题都有本人的文件夹。 何时应用仅主题备份: 这种类型的备份对于在更新主题之前运行十分有用,因为主题的先前版本将被保留,以备您须要复原时应用。 5.仅媒体备份仅媒体类型的备份是您通过媒体库上传到网站的所有媒体文件的备份。 备份实现后,备份的 zip 文件下载会显示所有内容。 ...

April 13, 2023 · 1 min · jiezi

关于word:笑小枫的SpringBoot系列十五SpringBoot根据模板生成Word

通过maven引入须要的依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId></dependency>创立导出模版1、首先创立一个word模版文档,模版如下图 word模版地址:http://file.xiaoxiaofeng.site/files/word.doc 留神word中的占位符的格局,就是freemaker的格局 具体解释如下: 文字处理:间接用${} 两头为替换的字段名。 如果间接在word外面定义${title},在转换成xml的时候有可能会被一些编码隔开,这个时候只须要用word关上xml,将这些内容从新输出一遍。 强烈建议用IDE关上,而后格式化下,在进行查看解决,能用搜寻尽量搜寻,xml的格局外面有太多的代码,不要硬刚图片解决:须要在word文档模版中插入图片 将word转换成xml后,关上xml,会将咱们的图片转换成长长的一段base64。 咱们把base64换成咱们的${pic}就能够了,pic为字段名,可任意替换 列表解决:须要在word文档模版中插入表格 找到第二个<w:tr>,第一行是咱们的题目,在其后面增加 <#list peopleList as list> 其中 peopleList是传入list的汇合名称 list 是别名。 参数取值为:${list.name}这样。 在与<w:tr>配对的</w:tr>前面增加</#list>。 语法同freemaker的for循环语法 创立ftl模板将上述word文档另存为test.xml格局,另存完之后能够用浏览器关上test.xml文件,查看咱们的占位符是否规范 留神:占位符有时候会产生被隔开的状况,如下图: 图片的替换同下面的阐明,图片为一串长长的base64,如下图所示: 而后将文件搁置resources/templates目录下。 搁置在resource目录下即可,剩下的目录依据本人需要定制。留神要与WordUtil.java中的目录对应。 编写程序通用的导出工具类在util包下创立WordUtil.java工具类, package com.maple.demo.util;import freemarker.template.Configuration;import freemarker.template.Template;import freemarker.template.TemplateException;import java.io.*;import java.nio.charset.StandardCharsets;import java.util.Map;import static freemarker.template.Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS;/** * @author 笑小枫 * @date 2022/7/27 * @see <a href="https://www.xiaoxiaofeng.com">https://www.xiaoxiaofeng.com</a> */public class WordUtil { private final Configuration configuration; public WordUtil() { configuration = new Configuration(DEFAULT_INCOMPATIBLE_IMPROVEMENTS); configuration.setDefaultEncoding("UTF-8"); } public void createWord(Map<String, Object> dataMap, String templateName, String fileName) { // 模板文件所在门路 configuration.setClassForTemplateLoading(this.getClass(), "/templates"); Template t = null; try { // 获取模板文件 t = configuration.getTemplate(templateName, "UTF-8"); } catch (IOException e) { e.printStackTrace(); } // 导出文件 File outFile = new File(fileName); try (Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), StandardCharsets.UTF_8))) { if (t != null) { // 将填充数据填入模板文件并输入到指标文件 t.process(dataMap, out); } } catch (IOException | TemplateException e1) { e1.printStackTrace(); } }}申请接口在controller包下创立TestWordController.java ...

March 19, 2023 · 2 min · jiezi

关于word:前端word文件docx预览的VUE组件

开发了一个十分好用的word、excel、pdf预览vue组件,只需提供文件的src地址,或者是文件的ArrayBuffer,即可实现文件预览,十分不便。 先看成果查看demo演示 github源码 装置有三个组件,能够别离依据须要进行装置 //docx文档预览组件npm install @vue-office/docx//excel文档预览组件npm install @vue-office/excel//pdf文档预览组件npm install @vue-office/pdf应用示例docx文档的预览<template> <vue-office-docx :src="docx" @rendered="rendered"/></template><script>//引入VueOfficeDocx组件import VueOfficeDocx from '@vue-office/docx'export default { components:{ VueOfficeDocx }, data(){ return { docx: 'http://static.shanhuxueyuan.com/test6.docx' //设置文档地址 } }, methods:{ rendered(){ console.log("渲染实现") } }}</script>excel文档预览<template> <vue-office-excel :src="excel" @rendered="rendered"/></template><script>//引入VueOfficeExcel组件import VueOfficeExcel from '@vue-office/excel'//引入相干款式import '@vue-office/excel/lib/index.css'export default { components:{ VueOfficeExcel }, data(){ return { excel: 'http://static.shanhuxueyuan.com/demo/excel.xlsx'//设置文档地址 } }, methods:{ rendered(){ console.log("渲染实现") } }}</script>pdf文档预览<template> <vue-office-pdf :src="pdf" @rendered="rendered"/></template><script>//引入VueOfficePdf组件import VueOfficePdf from '@vue-office/pdf'export default { components:{ VueOfficePdf }, data(){ return { pdf: 'http://static.shanhuxueyuan.com/test.pdf' //设置文档地址 } }, methods:{ rendered(){ console.log("渲染实现") } }}</script>

January 6, 2023 · 1 min · jiezi

关于word:记录一次乱码问题修复经历排查修复Poitl使用HttpServletResponse导出Word乱码问题

问题Poi-tl中HttpServletResponse导出Word乱码问题: 文件名应用中文,中文名乱码导出的文件下载后乱码 起因文件名中文乱码: 没有设置文件名的编码规定文件下载乱码: 在RESTful中的Controller层谬误地应用了PostMapping 解决办法文件名乱码: String attachName = new String(("Xxx.docx").getBytes(), "ISO-8859-1");response.setHeader("Content-disposition", "attachment;filename=" + attachName);文件下载乱码: Word导出的接口应用==GetMapping==应用==Request URL==来获取文件的下载获取Word模版门路: 应用InputStream工具类获取门路的文件 // 应用InputStream流获取Word模版InputStream fis = this.getClass().getResourceAsStream("/template/xxxTemplate.docx");总结依据框架文档好好学习框架的用法后再依据实例开发相干性能留神框架中的应用留神点和高级用法将高级用法与我的项目理论联合起来,抉择应用的最佳计划

January 2, 2022 · 1 min · jiezi

关于word:vue中使用docxpreview插件预览word文档后端express

问题形容本文记录了一下预览word文档的性能。须要用到: 前端:vue后端:express插件:docx-preview 思路剖析后端express代码中读取文件夹中的 .docx 类型文件而后将其以可读流的形式返回给前端一个blob流文件后端返回的流文件前端收到当前,执行docx-preview插件的renderAsync办法即可渲染出预览的成果咱们先看一下效果图 效果图 代码后端express代码// 引入文件模块 const fs = require("fs")// 返回word文件接口route.get('/getDoc', (req, res) => {  // 假如咱们的word文档文件就寄存在这个doc目录外面  let docxUrl = './doc/出师表.docx'  // 容许跨域  res.header("Access-Control-Allow-Origin", "*");  // 设置申请头  res.writeHead(200, {    // 指定文件类型为docx    'Content-Type': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',  })  //创立可读流  let readStream = fs.createReadStream(docxUrl)  // 将读取的后果以管道pipe流的形式返回给前端  readStream.pipe(res);})前端vue代码留神,vue我的项目要先下载插件哦cnpm i docx-preview --save <template> <div> <el-button @click="goPreview">点击预览word文件</el-button> <el-button @click="downLoad">点击下载word文件</el-button> <div class="docWrap"> <!-- 预览文件的中央(用于渲染) --> <div ref="file"></div> </div> </div></template><script>// 引入axios用来发申请import axios from "axios";// 引入docx-preview插件let docx = require("docx-preview");export default { mounted() { console.log("应用插件的renderAsync办法来渲染", docx); // }, methods: { // 预览 goPreview() { axios({ method: "get", responseType: "blob", // 因为是流文件,所以要指定blob类型 url: "http://ashuai.work:10000/getDoc", // 本人的服务器,提供的一个word下载文件接口 }).then(({ data }) => { console.log(data); // 后端返回的是流文件 docx.renderAsync(data, this.$refs.file); // 渲染到页面 }); }, // 下载 downLoad() { axios({ method: "get", responseType: "blob", // 因为是流文件,所以要指定blob类型 url: "http://ashuai.work:10000/getDoc", // 本人的服务器,提供的一个word下载文件接口 }).then(({ data }) => { console.log(data); // 后端返回的是流文件 const blob = new Blob([data]); // 把失去的后果用流对象转一下 var a = document.createElement("a"); //创立一个<a></a>标签 a.href = URL.createObjectURL(blob); // 将流文件写入a标签的href属性值 a.download = "出师表.docx"; //设置文件名 a.style.display = "none"; // 障眼法藏起来a标签 document.body.appendChild(a); // 将a标签追加到文档对象中 a.click(); // 模仿点击了a标签,会触发a标签的href的读取,浏览器就会主动下载了 a.remove(); // 一次性的,用完就删除a标签 }); }, },};</script><style lang="less" scoped>.docWrap { // 指定款式宽度 width: 900px; overflow-x: auto;}</style>为了不便大家调试成果,所以后端接口我也提供了一份,大家如果不想写node接口间接用我的即可,接口在上述vue代码中,间接复制粘贴运行即可 ...

November 24, 2021 · 1 min · jiezi

关于word:word的导出发布

const html = `导出的测试文字`; const htmlDom = `<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>题目</title> </head> <body> <div class="t-l" style="width:1200px"> ${html} </div> </body> </html>`; const htmlDom_ = new Blob([htmlDom], { "type": "text/html;charset=utf-8" }) const formdata = new FormData(); formdata.append('file', htmlDom_, `sdf.html`);//sdf.html是设置文件名 // axios({ // method: 'post', // url: url, // data: formdata, // responseType: 'blob',//这里如果不设置,下载会打不开文件 // }).then(res => { // console.log('download res', res); // 通过后盾返回 的word文件流设置文件名并下载 const blob = new Blob([htmlDom], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8' }); //application/vnd.openxmlformats-officedocument.wordprocessingml.document这里示意doc类型 const downloadElement = document.createElement('a'); const href = window.URL.createObjectURL(blob); //创立下载的链接 downloadElement.href = href; downloadElement.download = `${data.tempName}.doc`; //下载后文件名 document.body.appendChild(downloadElement); downloadElement.click(); //点击下载 document.body.removeChild(downloadElement); //下载实现移除元素 window.URL.revokeObjectURL(href); //开释掉blob对象 data.visible = false;//开释掉model

June 29, 2021 · 1 min · jiezi

关于word:php编辑Word并转为Pdf的实战记录

php操作Word进行模板变量替换装置PHP操作Word的扩大composer require phpoffice/phpwordWord模板假如咱们的Word名称叫做 iamking.docx,如图 PHP代码替换空白我的项目中创立PHP文件,index.php <?php/** * Created by PhpStorm. * User: smallForest<1032817724@qq.com> * Date: 2021/1/6 * Time: 17:44 */require_once "vendor/autoload.php";//引入TemplateProcessoruse PhpOffice\PhpWord\TemplateProcessor;//实例化, 参数传入模板文件地址$templateProcessor = new TemplateProcessor('word/iamking.docx');//替换(设置)变量值,我在测试的时候替换的字符比拟长,这里缩短了$templateProcessor->setValue('kouhao', '我是测试口号!奥利给nice');$templateProcessor->setValue('date', '2021-10-01');//保留文件$templateProcessor->saveAs('word/iamking2.docx');将Word转为PDF文档平时用的最多的也就是Linux中操作,须要装置一个libreoffice服务。本机环境centos7 yum install libreoffice假如咱们上一步保留的文件iamking2.docx在/root/word中。执行以下命令 cd /root/word/libreoffice --convert-to pdf:writer_pdf_Export iamking2.docx会在当前目录生成一个同名的PDF文件iamking2.pdf 错误处理通过第二步认为功败垂成,其实不然。生成的PDF中的中文会被辨认成小方块,显然不是咱们冀望的后果。谬误起因:Linux服务器短少中文字体解决:进入Mac /System/Library/Fonts目录,找到这两个字体文件上传到Linux的/usr/share/fonts/chinese的目录中 cd /usr/share/fonts//短少chinese目录须要生成mkdir chinese//上传字体文件之后,批改权限chmod 755 -R chinesefc-list再次执行导出命令,字体就能够了 留神libreoffice是单线程的,多个文件导出的时候要进行加锁排队,不然会出现意外谬误PHP执行脚本,须要思考好。具体的实现细节本人掂量

January 7, 2021 · 1 min · jiezi

关于word:WPS2019的使用

应用WPS.2019有人喜爱微软自带的,我这种人就喜爱WPS,毕竟是 Made in China首先官网下载 而后下一步下一步,然而不要运行关上桌面Wps所在位置,查找到a结尾文件删除 而后关上输出:694BF-YUDBG-EAR69-BPRGB-ATQXH 你会发现提醒 一生受权

December 23, 2020 · 1 min · jiezi

关于word:如何使用java代码导出word

前言:导出word的需要其实在日常工作中用到的中央还不少,于是想写一篇文章好好记录一下,在导出之前,须要理解一下对于浏览器如何解决servlet的后盾数据。具体能够理解一下http通信下载行为在servlet的实现。 ==导出的工具类代码来源于网络,如有侵权能够分割我删除文章== 集体应用==ftl==作为word导出模板引擎,有很多模板引擎能够选,集体通过查阅材料发现ftl用的比拟多,所以抉择这一种 <!-- more --> 码云地址:文章牵扯代码比拟多,如果要看具操作能够查看我本人瞎弄的一个码云地址: https://gitee.com/lazyTimes/i... 成果演示:给了一个测试页面,长期写了一些脚本,能够作为参考(后续会贴Html代码进去) 点击提交,导出内容, 导出word报告 导出之后,关上word内容为: 实现步骤 - 制作word模板第一步 新建word,制作成绩样板将须要导出word的内容,先粘贴到一个新建的word文件外面 第二步 转存格局 -> xml抉择文件“另存为”,将格局设置为xml格局 第三步 格式化文件将文件放到idea或者反对格式化的软件外面,进行格式化,保留: 留神占位符要匹配 第四步:模板数据替换占位符在word页面将须要导入数据的中央,替换占位符 须要留神内容解决的时候: ${ filename} 有可能被切割为多个局部,咱们须要把多个切割局部,改为上面的款式 肯定记得所有的改变之后,马上关上xml格局的word,确认是不是改崩了 下面的步骤实现,阐明有一个word模板做好了 第五步:制作ftl文件,word模板成型在我的项目外面新建一个ftl文件,同时须要在工具类中配置,同时把做好站位符操作的xml内容贴进去 代码实现 - 导出代码工具类的配置如下:WordGeneratorUtil.java: /** * 模板常量类配置 */public static final class FreemarkerTemplate { public static final String REPORT = "report"; public static final String REC_RECOMMEND = "recRecommend"; // 减少你的模板文件名称:}在动态的代码块外面,须要注入对应的模板配置 // 留神初始化要载入对应模板allTemplates.put(FreemarkerTemplate.REPORT, configuration.getTemplate(FreemarkerTemplate.REPORT + ".ftl"));allTemplates.put(FreemarkerTemplate.REC_RECOMMEND,configuration.getTemplate(FreemarkerTemplate.REC_RECOMMEND + ".ftl"));在配置实现之后,导出的时候就能够找到对应的文件了建设一个通用的导出办法:/** * 创立doc 文档 * dataMap 数据,须要对应模板的占位符,否则会出错 * @param dataMap 数据 * @param wordName word 报表的名称 * @param freemarkerTemplateName 指定须要应用哪个freemarker模板 * @return */public static File createDoc(String freemarkerTemplateName, String wordName, Map<String, String> dataMap) { try { File f = new File(wordName); Template t = allTemplates.get(freemarkerTemplateName); // 这个中央不能应用FileWriter因为须要指定编码类型否则生成的Word文档会因为有无奈辨认的编码而无奈关上 Writer w = new OutputStreamWriter(new FileOutputStream(f), StandardCharsets.UTF_8); t.process(dataMap, w); w.close(); return f; } catch (Exception ex) { ex.printStackTrace(); throw new RuntimeException("生成word文档失败"); }}工具类残缺代码:package com.zxd.interview.export;import freemarker.template.Configuration;import freemarker.template.Template;import org.springframework.util.CollectionUtils;import java.io.*;import java.nio.charset.StandardCharsets;import java.util.HashMap;import java.util.Map;/** * <p> * 从网络上依据材料找到的一个工具类 * 次要以freemarker 为外围的模板生成word文档的工具类 * 这里默认配置了固定门路 * 须要依据门路取到对应模板 * 申请参数须要设置对应的模板名称 * @author * @className: WordGeneratorUtils * @description: 文档生成工具类 * </p> * version: V1.0.0 */public final class WordGeneratorUtil { private static Configuration configuration = null; private static Map<String, Template> allTemplates = null; private static final String TEMPLATE_URL = "/templates"; /** * 模板常量类配置 */ public static final class FreemarkerTemplate { public static final String Test = "test"; public static final String REPORT = "report"; public static final String REC_RECOMMEND = "recRecommend"; } static { configuration = new Configuration(Configuration.VERSION_2_3_28); configuration.setDefaultEncoding("utf-8"); configuration.setClassForTemplateLoading(WordGeneratorUtil.class, TEMPLATE_URL); allTemplates = new HashMap(4); try { // 留神初始化要载入对应模板 allTemplates.put(FreemarkerTemplate.Test, configuration.getTemplate(FreemarkerTemplate.Test + ".ftl")); allTemplates.put(FreemarkerTemplate.REPORT, configuration.getTemplate(FreemarkerTemplate.REPORT + ".ftl")); allTemplates.put(FreemarkerTemplate.REC_RECOMMEND, configuration.getTemplate(FreemarkerTemplate.REC_RECOMMEND + ".ftl")); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } private WordGeneratorUtil() { throw new AssertionError(); } /** * 创立doc 文档 * dataMap 数据,须要对应模板的占位符,否则会出错 * @param dataMap 数据 * @param wordName word 报表的名称 * @param freemarkerTemplateName 指定须要应用哪个freemarker模板 * @return */ public static File createDoc(String freemarkerTemplateName, String wordName, Map<String, String> dataMap) { try { File f = new File(wordName); Template t = allTemplates.get(freemarkerTemplateName); // 这个中央不能应用FileWriter因为须要指定编码类型否则生成的Word文档会因为有无奈辨认的编码而无奈关上 Writer w = new OutputStreamWriter(new FileOutputStream(f), StandardCharsets.UTF_8); t.process(dataMap, w); w.close(); return f; } catch (Exception ex) { ex.printStackTrace(); throw new RuntimeException("生成word文档失败"); } }}调用层:在业务层,将须要导出的数据,依据占位符的i信息进行赋值,留神不能漏,否则导出之后的文件会打不开@Overridepublic File exportQualityStep4Word(WordReportDTO exportWordRequest) { Map<String, String> datas = new HashMap(QualityConstants.HASH_MAP_INIT_VALUE); //主题目 datas.put("schoolName", exportWordRequest.getSchoolName()); datas.put("title1", exportWordRequest.getBaseSituation()); datas.put("title2", exportWordRequest.getLearningEnvRec()); datas.put("title3", exportWordRequest.getLearningEnvPro()); datas.put("title4", exportWordRequest.getDayLifeRec()); datas.put("title5", exportWordRequest.getDayLifePro()); datas.put("title6", exportWordRequest.getLearningActivityRec()); datas.put("title7", exportWordRequest.getLearningActivityPro()); datas.put("title8", exportWordRequest.getDevRecommend()); datas.put("base64_1", exportWordRequest.getBase64_1()); datas.put("base64_2", exportWordRequest.getBase64_2()); datas.put("base64_3", exportWordRequest.getBase64_3()); datas.put("base64_4", exportWordRequest.getBase64_4()); datas.put("base64_5", exportWordRequest.getBase64_5()); datas.put("base64_6", exportWordRequest.getBase64_6()); //导出 return WordGeneratorUtil.createDoc(WordGeneratorUtil.FreemarkerTemplate.REPORT, exportWordRequest.getWordName(), datas);}上面是生成报表导出的基本操作,能够在用到的中央复制过来改变即可/** * 生成报告的导出报表操作 * * @param request request * @param response 响应数据 * @param exportWordRequest 导出dto */@PostMapping("/quality/exportword")@ResponseBodypublic void povertyExportWord(HttpServletRequest request, HttpServletResponse response, WordReportDTO exportWordRequest) { File file = qualityReportService.exportQualityStep4Word(exportWordRequest); InputStream fin = null; OutputStream out = null; try { // 调用工具类WordGeneratorUtils的createDoc办法生成Word文档 fin = new FileInputStream(file); response.setCharacterEncoding(QualityConstants.UTF_8); response.setContentType(QualityConstants.CONTENT_TYPE_WORD); // 设置浏览器以下载的形式解决该文件 // 设置文件名编码解决文件名乱码问题 //取得申请头中的User-Agent String filename = exportWordRequest.getWordName(); String agent = request.getHeader(QualityConstants.USER_AGENT); String filenameEncoder = ""; // 依据不同的浏览器进行不同的判断 if (agent.contains(QualityConstants.MSIE)) { // IE浏览器 filenameEncoder = URLEncoder.encode(filename, QualityConstants.UTF_8); filenameEncoder = filenameEncoder.replace("+", " "); } else if (agent.contains(QualityConstants.FIREFOX)) { // 火狐浏览器 BASE64Encoder base64Encoder = new BASE64Encoder(); filenameEncoder = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes(QualityConstants.UTF_8)) + "?="; } else { // 其它浏览器 filenameEncoder = URLEncoder.encode(filename, QualityConstants.UTF_8); } response.setHeader(QualityConstants.ACCESS_CONTROL_ALLOW_ORIGIN, "*");//所有域都能够跨 response.setHeader(QualityConstants.CONTENT_TYPE, QualityConstants.CONTENT_TYPE_STEAM);//二进制 流文件 response.setHeader(QualityConstants.CONTENT_DISPOSITION, "attachment;filename=" + filenameEncoder + ".doc");//下载及其文件名 response.setHeader(QualityConstants.CONNECTION, QualityConstants.CLOSE);//敞开申请头连贯 //设置文件在浏览器关上还是下载 response.setContentType(QualityConstants.CONTENT_TYPE_DOWNLOAD); out = response.getOutputStream(); byte[] buffer = new byte[QualityConstants.BYTE_512]; int bytesToRead = QualityConstants.NUM_MINUS_1; // 通过循环将读入的Word文件的内容输入到浏览器中 while ((bytesToRead = fin.read(buffer)) != QualityConstants.NUM_MINUS_1) { out.write(buffer, QualityConstants.NUM_ZERO, bytesToRead); } } catch (Exception e) { throw new RuntimeException(QualityConstants.FARIURE_EXPORT, e); } finally { try { if (fin != null) { fin.close(); } if (out != null) { out.close(); } if (file != null) { file.delete(); } } catch (IOException e) { throw new RuntimeException(QualityConstants.FARIURE_EXPORT, e); } }}导出实体dto上面写了一个导出的实体dto,实体对象能够本人定制: ...

November 11, 2020 · 9 min · jiezi