文件下载冻结,在linux上无法完成



我使用"Node.js", " expression "one_answers";SheetJS"这样,将数据(来自对象数组)保存在XLSX文件中并返回要由另一个端点作为静态文件下载的文件的url的端点。

import crypto from 'crypto';
import * as XLSX from 'xlsx';
import path from 'path';
import * as fs from 'fs';
...
const exportToExcelFile = async (data) => {
...
const worksheet = XLSX.utils.json_to_sheet(data);
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, 'Data');
const buf = XLSX.write(workbook, { bookType: 'xlsx', type: 'buffer' });
fs.writeFileSync(resolvedFilename, buf);
return `${process.env.APP_URL}/public/downloads/${date}/${filename}`;
}

在Windows中,文件生成和下载工作完美,然而,当应用程序在linux服务器上运行时,文件生成,然而,下载冻结并且没有完成。

[下载congelado] [1]

如果我将'buffer'类型更改为'binary',则下载适用于windows和linux,但是,在尝试打开文件时,Excel显示损坏的文件消息。

const buf = XLSX.write(workbook, { bookType: 'xlsx', type: 'binary' });

有什么想法或建议吗?

写完后关闭文件会有帮助吗?

const fs = require("fs/promises");
(async function() {
var file = await fs.open(resolvedFilename, "w");
await file.write(buf);
await file.close();
})();

它工作得很好,您可以在这里检查您的代码:https://glitch.com/edit/#!
我所做的只是复制/粘贴你的代码到glitch,看看它是否工作。

所以你应该检查你的浏览器网络选项卡,看看它是否报告任何错误。另外,利用一些工具,例如带-v选项的curl来下载文件,它将打印有关您发出的下载请求的所有信息

最新更新