我正在尝试通过网络抓取从网站下载 .xlsx 文件,我已经完成了整个过程,直到我访问了网站为下载生成的临时 url。
当我在浏览器中打开文件 url 时,下载会自动开始(如图所示)。 excel文件下载
问题是我需要解析这个文件以便稍后发送到我的前端。当我尝试使用 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;
我的问题是:
- 是否可以将这些数据解析为数组而无需保存到物理文件?如果是,如何?
- 如果我无法在不需要填充物理文件的情况下解析数据,我该如何下载电子表格,然后稍后读取和解析数据。
注意:我已经使用手动输入的有效文件测试了下载功能的其余部分,一切正常。唯一不起作用的是电子表格的数据下载和读取部分。