gpt4 book ai didi

javascript - 将文件写入文件系统,然后在 Express 中下载

转载 作者:行者123 更新时间:2023-12-02 22:16:01 24 4
gpt4 key购买 nike

将文件写入文件系统后是否可以使用 res.download() ?

router.get('/exportjson', (req, res, next) => {
let json = `{"@dope":[{"set":"","val":"200"}],"comment":"comment","folderType":"window"}`
const file = `${__dirname}/upload-folder/export.JSON`;
fs.writeFile('file', json, 'application/json', function(){
res.download(file);
})
})

最佳答案

我不确定我是否完全理解您的问题,但我假设您希望能够将该 json 数据保存到路径 /upload-folder/export.json 中,然后允许浏览器使用 res.download() 在路径 GET/exportjson 处下载文件。

您有几个问题。首先,fs.writeFile 将文件路径作为第一个参数,并且您只需传递字符串file。使用您的代码,数据将作为 file 写入当前目录。您可能想使用 path 模块并创建您要写入的文件的路径,如下所示:

const path = require('path');

const jsonFilePath = path.join(__dirname, '../upload-folder/export.json');

假设代码位于routes/index.js,该路径将指向文件upload-folder/export.json的项目根目录。

您要写入的数据位于变量 json 中,但您将其存储为字符串。我实际上会将它保留为一个对象:

let json = {
"@dope": [
{
"set":"",
"val":"200"
}
],
"comment":"comment",
"folderType":"window"
};

然后,当您将其作为第二个参数传递给 fs.writeFile 时,对其调用 JSON.stringify 。您还需要传入 utf-8 选项作为第三个参数,而不是 application/json:

fs.writeFile(jsonFilePath, JSON.stringify(json), 'utf-8', function(err) {

在对 fs.writeFile 的回调中,您想要调用 res.download 并将其传递给您刚刚写入文件系统的文件的路径,即存储在 jsonFilePath 中(这部分你是对的,我只是更改了变量名称):

res.download(jsonFilePath);

这是路由器文件的相关部分,其中包含使一切正常工作的代码:

const fs = require('fs');
const path = require('path');

const jsonFilePath = path.join(__dirname, '../upload-folder/export.json');

router.get('/exportjson', (req, res, next) => {

let json = {
"@dope": [
{
"set":"",
"val":"200"
}
],
"comment":"comment",
"folderType":"window"
};

fs.writeFile(jsonFilePath, JSON.stringify(json), 'utf-8', function(err) {
if (err) return console.log(err);
res.download(jsonFilePath);
});

});

假设此文件位于 /routes/index.js 中,该文件将保存在 /upload-folder/export.json 中。

这是一个 gif,展示了它在我的机器上的外观:

exportJson

关于javascript - 将文件写入文件系统,然后在 Express 中下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59384663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com