API下载 组装的 word 文档

lumen,php语言,laravel 2021-07-17

Word文档生成有很多种方式,图简单,其实可以就按html排版,一键导出
网页直接导出,记得加上导出word约束的头($fileName,导出的文件名)

header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=$fileName");

这种导出呢,样式和原生网页是有点问题,但注意单位和尺寸,就没有多大问题了,具体的要自己尝试

但现在的开发,基本上都是前后端分离,API方式调用,那怎么实现呢?

同样是调用地址就OK了吗?
不是的,直接调用网页的地址,发现没有反应,第一反应是不是API头部约束了什么,导致了不能直接下载原格式的word文档

琢磨了好久,没有成功,我换了一种思路,先把word文档保存起来,返回文档下载路径给API
期间我请求了一下API,居然可以正常返回了,但只是html代码,情况是我在准备保存word文档到本地的时候,去掉了头部约束,是header的影响

那能正常返回就好办了,两种方式
第一种,就是直接保存为word文档下载。
第二种,正常返回后,转为word文档保存。
第一种没有什么可谈的,容易理解也好办
第二种以Axios为例

function apiRequestDownload(url, filename, type, formData, config = {}) {
    return new Promise((resolve, reject) => {
        Axios({ url, responseType: "blob", method: type, data: formData,config })
            .then(result => {
                let fileURL = window.URL.createObjectURL(
                    new Blob([result.data], { type: '' })
                );
                let fileLink = document.createElement("a");

                fileLink.href = fileURL;
                fileLink.setAttribute("download", filename);
                document.body.appendChild(fileLink);

                fileLink.click();
                resolve(result);
            })
            .catch(err => {
                reject(err);
            });
    });
}

本文由 wenyi 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

只有地板了

  1. 鍗庣撼鍏徃鍚堜綔寮€鎴锋墍闇€鏉愭枡锛熺數璇濆彿鐮?5587291507 寰俊STS5099
    鍗庣撼鍏徃鍚堜綔寮€鎴锋墍闇€鏉愭枡锛熺數璇濆彿鐮?5587291507 寰俊STS5099

    果博东方客服开户联系方式【182-8836-2750—】?薇- cxs20250806】
    果博东方公司客服电话联系方式【182-8836-2750—】?薇- cxs20250806】
    果博东方开户流程【182-8836-2750—】?薇- cxs20250806】
    果博东方客服怎么联系【182-8836-2750—】?薇- cxs20250806】

添加新评论