如何使用 nodejs 下载 .xlsx 文件
How to download an .xlsx file using nodejs
我正在尝试通过网络抓取从网站下载 .xlsx 文件,我已经完成了整个过程,直到我访问网站为下载生成的临时 url。
当我在浏览器中打开文件 url 时,下载自动开始(如图所示)。
excel file download
问题是我需要解析这个文件以便稍后发送到我的前端。当我尝试使用 fs.createWriteStream('result.xlsx') 创建文件并稍后用 res.pipe(fileStream) 填充它时;生成的文件总是空的。
这是我的完整代码:
const https = require("https");
const fs = require("fs");
const path = require("path");
const xlsx = require("node-xlsx");
function download(url, callback) {
const filename = path.basename(url);
const req = https.get(url, function (res) {
const fileStream = fs.createWriteStream("result.xlsx");
res.pipe(fileStream);
const obj = xlsx.parse('result.xlsx');
callback(obj[0]);
fileStream.on("error", function (err) {
console.log("Error writting to the stream.");
console.log(err);
});
fileStream.on("close", function () {
callback(filename);
});
fileStream.on("finish", function () {
fileStream.close();
});
});
req.on("error", function (err) {
console.log("error downloading the file");
console.log(err);
});
}
module.exports.download = download;
我的问题是:
- 是否可以在不需要保存到物理文件的情况下将此数据解析为数组?如果是,如何?
- 如果我无法在不需要填充物理文件的情况下解析数据,我该如何下载电子表格,然后再读取和解析数据。
注意:我已经使用手动输入的有效文件测试了其余的下载功能,一切正常。唯一不起作用的是电子表格的数据下载和读取部分。
是否可以在不需要保存到物理文件的情况下将这些数据解析为数组?基本上没有(来自远程服务器的文件)。除了服务器允许你直播。
你的代码几乎是正确的,只是顺序错了。写完一定要回调,解决空文件问题
方法如下:
const https = require("https");
const fs = require("fs");
const path = require("path");
const xlsx = require("node-xlsx");
function download(url, callback) {
const filename = path.basename(url);
const req = https.get(url, function (res) {
const fileStream = fs.createWriteStream("result.xlsx");
res.pipe(fileStream);
fileStream.on("error", function (err) {
console.log("Error writting to the stream.");
console.log(err);
});
fileStream.on("close", function () {
const obj = xlsx.parse('result.xlsx');// or whatever you named it
callback(obj[0]);
});
fileStream.on("finish", function () {
fileStream.close();
});
});
req.on("error", function (err) {
console.log("error downloading the file");
console.log(err);
});
}
module.exports.download = download;
我正在尝试通过网络抓取从网站下载 .xlsx 文件,我已经完成了整个过程,直到我访问网站为下载生成的临时 url。
当我在浏览器中打开文件 url 时,下载自动开始(如图所示)。 excel file download
问题是我需要解析这个文件以便稍后发送到我的前端。当我尝试使用 fs.createWriteStream('result.xlsx') 创建文件并稍后用 res.pipe(fileStream) 填充它时;生成的文件总是空的。
这是我的完整代码:
const https = require("https");
const fs = require("fs");
const path = require("path");
const xlsx = require("node-xlsx");
function download(url, callback) {
const filename = path.basename(url);
const req = https.get(url, function (res) {
const fileStream = fs.createWriteStream("result.xlsx");
res.pipe(fileStream);
const obj = xlsx.parse('result.xlsx');
callback(obj[0]);
fileStream.on("error", function (err) {
console.log("Error writting to the stream.");
console.log(err);
});
fileStream.on("close", function () {
callback(filename);
});
fileStream.on("finish", function () {
fileStream.close();
});
});
req.on("error", function (err) {
console.log("error downloading the file");
console.log(err);
});
}
module.exports.download = download;
我的问题是:
- 是否可以在不需要保存到物理文件的情况下将此数据解析为数组?如果是,如何?
- 如果我无法在不需要填充物理文件的情况下解析数据,我该如何下载电子表格,然后再读取和解析数据。
注意:我已经使用手动输入的有效文件测试了其余的下载功能,一切正常。唯一不起作用的是电子表格的数据下载和读取部分。
是否可以在不需要保存到物理文件的情况下将这些数据解析为数组?基本上没有(来自远程服务器的文件)。除了服务器允许你直播。
你的代码几乎是正确的,只是顺序错了。写完一定要回调,解决空文件问题
方法如下:
const https = require("https");
const fs = require("fs");
const path = require("path");
const xlsx = require("node-xlsx");
function download(url, callback) {
const filename = path.basename(url);
const req = https.get(url, function (res) {
const fileStream = fs.createWriteStream("result.xlsx");
res.pipe(fileStream);
fileStream.on("error", function (err) {
console.log("Error writting to the stream.");
console.log(err);
});
fileStream.on("close", function () {
const obj = xlsx.parse('result.xlsx');// or whatever you named it
callback(obj[0]);
});
fileStream.on("finish", function () {
fileStream.close();
});
});
req.on("error", function (err) {
console.log("error downloading the file");
console.log(err);
});
}
module.exports.download = download;