我如何在我的服务器上的express和node中创建一个文件,然后将其下载到我的客户端。我使用NextJS作为我的前端和后端。我很困惑,在服务器文件夹的根目录上创建文件后,我如何在前端下载文件。由于我使用React作为我的前端,每当我尝试访问该文件路径时,它都会尝试将我带到页面而不是文件
这是我在Node的快速路线
var xls = json2xls(json, {
fields
});
// If there isn't a folder called /temp in the
// root folder it creates one
if (!fs.existsSync('./temp')) {
fs.mkdirSync('./temp');
}
const fileName = `temp/${req.user.first_name}${req.body._id + Date.now()}.xlsx`
// fs.writeFileSync(fileName, xls, 'binary');
fs.writeFile(fileName, xls, 'binary', function (err, result) {
if (err) {
return console.log(err);
}
console.log(result, 'this is result')
});
字符串
这是我的前端
axios.post('api/download',payload)
.then(res => {
const link = document.createElement('a');
link.href = res.data.url;
link.download
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
})
.catch(err => {
throw err
})
型
3条答案
按热度按时间8dtrkrch1#
1.你能在API上用GET发出请求吗?
1.使用GET请求。
qvtsj1bj2#
将
temp
目录设置为静态资源目录:字符串
使用文件URL数据响应POST请求
型
另一种方式是,您可以将
xls
二进制文件直接发送到客户端,在客户端中,您可以从响应中创建一个BLOB对象,然后为该BLOB对象创建下载链接。5t7ly7z53#
这里有一个前端的示例代码供您参考:
在我的例子中,服务器端页面不能将blob对象从服务器传输到客户端。
因此,我使用一个名为download-button.tsx的组件解决了这个问题,该组件用于下载Excel文件。
component/download-button.tsx
字符串
API/download/route.ts
型