具有文件下载选项的应用程序前端(可以采用以下格式:xlsx,csv,dat)。 为此,我使用fileSaver.js
一切都适用于.dat/.csv
格式,但对于.xlsx
则无效,文件已损坏。
我测试了以下格式的转换:
utf8
base64
binary
这是我的工作方式:
// /* BACK */ //
// data is
fs.readFile(filePath, (err, data) {...})
// the api give this answer the important part is "filename" & "data"
{"status":"ok","context":"writing the intermediate file","target":"/temp/","fileName":"name.xlsx","data":{"type":"Buffer","data":[72,82,65,67,67,69,83,83,32,10]}}
// /* FRONT */ //
let json = JSON.stringify(data)
let buffer = Buffer.from(JSON.parse(json).data)
let read = buffer.toString('utf8')
let blob = new Blob([read])
FileSaver.saveAs(blob, fileName)
答案 0 :(得分:0)
@Hadock 如果要下载扩展名为.csv的文件,则需要传递
这样的文件类型let blob = new Blob([csv], { type: 'application/vnd.ms-excel' });
代替
let blob = new Blob([read])
并且不要忘记发送扩展名为(test.csv)的文件名。
对于excel文件,我使用了其他插件 exceljs demo。
答案 1 :(得分:0)
您无法将json数据直接保存到.xlsx文件,您可以使用“ sheetjs”(https://sheetjs.com/)之类的库将json数据转换为excel格式
var ws_name = filename;//"SheetJS";
var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
/* add worksheet to workbook */
wb.SheetNames.push(ws_name);
wb.Sheets[ws_name] = ws;
var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'binary' });
saveAs(new Blob([s2ab(wbout)], { type: "application/octet-stream" }), filename + ".xlsx")
答案 2 :(得分:0)
好吧,对于通过此主题的任何人,我的解决方案都是:
(请记住,为dl文件提供更好的解决方案:以api响应的形式发送带有标头“ Content-disposition”的文件或对该文件like this使用express)
{"From Subject Received Size Categories
Shiza Khaliq Re: Resume for Dot Net Developer 5/10/2019 49 KB }
这里:
fs.readFile(filePath, (err, data) => {
if (err) {
console.log(`-------- oups error - read --------`)
console.log(err)
res.send({ status: `erreur`, context: `read the source file`, id: err.errno, code: err.code, message: err.message.replace(/\\/g, '/') })
} else {
res.send({ status: `ok`, context: `send data file`, target: target, fileName: fileName, data: data })
}
})
)/path/name.ext
)name.ext
)发送的数据{"type":"Buffer","data":[72,82,65,67,67,69,83,83,32,10]}