如何将Exceljs生成的Profile.xlsx文件保存至public文件夹?
问题解答
需求说明
我测试了以下代码,它运行正常,已在服务器的app.js同目录下生成了"Profile.xlsx"文件。请问是否可以将Profile.xlsx文件保存/下载到"public"文件夹中?我查阅了Exceljs文档,未找到相关路径设置方法,恳请帮助。
原测试代码
const con = require("../lib/db"); const excel = require("exceljs"); const db_excel_post = (req, res, next) => { con.query("SELECT * FROM db", (err, details, fields) => { const jsonData = JSON.parse(JSON.stringify(details)); let workbook = new excel.Workbook(); // 创建工作簿 let worksheet = workbook.addWorksheet("Profile"); // 创建工作表 worksheet.columns = [ { header: "Name", key: "name", width: 10 }, { header: "Age", key: "age", width: 10 }, { header: "Job", key: "job", width: 20 } ]; worksheet.addRows(jsonData); workbook.xlsx .writeFile("Profile.xlsx") .then(() => console.log("文件已保存!")); }); res.redirect("/"); }; module.exports = { db_excel_post };
解决方案
完全可以实现,只需修改writeFile方法的路径参数,指定为public文件夹的路径即可:
核心修改代码
// 直接指定public文件夹的相对路径,路径基于当前脚本文件所在位置 workbook.xlsx .writeFile("./public/Profile.xlsx") .then(() => console.log("文件已保存到public文件夹!"));
注意事项
- 确保项目根目录下已存在
public文件夹,若不存在需提前创建,否则会触发文件写入错误 - 如果当前脚本文件和
public文件夹不在同一层级,需调整相对路径。比如脚本在routes文件夹下,路径应改为../public/Profile.xlsx - 若要支持用户直接下载生成的文件,可在文件写入完成后,通过Express的
res.download方法返回文件给客户端,示例如下:
workbook.xlsx.writeFile("./public/Profile.xlsx") .then(() => { console.log("文件已保存!"); // 触发客户端下载文件 res.download("./public/Profile.xlsx", "Profile.xlsx", (err) => { if (err) { console.error("下载失败:", err); res.redirect("/"); } }); }) .catch((err) => { console.error("文件写入失败:", err); res.redirect("/"); });
内容的提问来源于stack exchange,提问作者Titan XP
相关产品推荐
相关产品推荐

