node.js - 如何使用nodejs将文件下载到本地计算机?
问题描述
我正在构建一个服务器,我想允许下载文件。带角度的前端 - 我在那里有数据库服务。
后端使用 NodeJS+express。
我有 BE 路由器和控制器,我编写了一些有效的代码 - 但并非适用于所有情况。
如果我在浏览器中输入要下载的 URL,请说“ http://localhost:3000/api/files/download/somefile ” 一切都按预期工作,并且文件已下载到我的 PC。
但是如果我在我的 FE 上设置一个函数来调用该下载函数(可以说,在单击某个按钮后) - 它不起作用,并且我收到一个错误:“解析http://localhost:3000期间的 Http 失败/api/files/download/some%20file "
我的服务器标头,正如我在 app.js 中所写:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept"
);
res.setHeader(
"Access-Control-Allow-Methods",
"GET, PUT, POST, PATCH, DELETE, OPTIONS"
);
next();
});
我在控制器上的功能:
exports.downloadFile = (req, res, next) => {
var data = req.params.file;
fs.writeFile("temp.txt", data, (err) => {
if (err){
console.log("error: "+err);
}
console.log("Successfully Written to File!");
var filePath = "temp.txt";
var fileName = "downloaded_file.txt";
res.download(filePath, fileName, (err) => {
console.log("download error: "+err)
});
});
我在 DB Service 的电话:
downloadExp(file: string) {
this.http.get("http://localhost:3000/api/files/download" + file)
}
我做错了什么?单击按钮后,如何从前端启用下载?
解决方案
我在前端使用 FileSaver 来下载文件。我知道仅链接的答案不太好,但我自己的代码与此处自述文件中的示例基本相同。https://github.com/eligrey/FileSaver.js/
推荐阅读
- powershell - Powershell ISE函数在预期输出之前输出双字符
- php - 我可以在内部连接子句之前包含一个 where 子句吗
- javers - Javers - 如何避免/禁用 Javers 审计的特定字段?
- error-handling - 有什么方法可以将 std::io::Error 转换为 failure::error::Error?
- woocommerce - WooCommerce 如何将完成的订单电子邮件发送到自定义字段电子邮件地址
- c# - 在 C# 中与 Xero 联系的 Web API
- excel - 在包含多行数据的 excel 中拆分单个单元格:
- python-2.7 - 使用 set_detailed_response 的问题 - ibm watson python sdk
- reactjs - React 代码在 localhost 上呈现正常,但是当我在 google chrome 中手动打开它时不起作用(通过直接打开 index.html 而不使用 npm)
- haproxy - 端口 80 的 Haproxy 后端服务器无法正常工作