小明:最近我在做一个网上办事大厅的项目,需要实现一个“下载”功能,你有什么建议吗?
小李:那你要先考虑用户点击下载时,系统是如何响应的。通常我们会用后端生成文件,然后返回给前端。
小明:那具体怎么操作呢?有没有代码示例?
小李:可以这样:前端使用axios发送请求到后端,后端处理数据并返回文件流。
小明:那前端代码是怎样的?
小李:这里是一个简单的前端示例:
axios.get('/api/download', { responseType: 'blob' })
.then(response => {
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'file.xlsx');
document.body.appendChild(link);
link.click();
});
小明:那后端怎么处理呢?
小李:以Node.js为例,你可以这样做:
app.get('/api/download', (req, res) => {
const filePath = path.join(__dirname, 'data.xlsx');
res.download(filePath);
});
小明:明白了,这样用户就可以直接下载文件了。
小李:没错,不过要注意跨域问题和文件路径的正确性。
小明:好的,谢谢你的帮助!
小李:不客气,有问题随时问我。