使用downloadjs下载CSV文件时被保存为TXT的问题求助
解决downloadjs下载CSV文件保存为TXT格式的问题
首先,我注意到你的代码里有几个关键问题,咱们一步步来修复:
1. 给文件名加上.csv后缀
你当前的文件名是'candidate_upload_template',没有明确指定后缀名,downloadjs有时候会因为MIME类型推断偏差,默认保存成txt格式。直接给文件名加上.csv后缀是最稳妥的解决方案:
handleFileDownload = () => { axios.get(`${API_BASE_URL}/nominations/candidate-template/download`, {responseType: 'blob'}) .then((response) => { // 文件名添加.csv后缀 download(new Blob([response.data]), 'candidate_upload_template.csv', 'text/csv'); }) .catch(err => { console.log(err) }); };
2. 修正downloadjs的参数传递
你第二次尝试时传了四个参数,但downloadjs的标准参数顺序是download(data, filename, mime),多余的参数会导致MIME类型被错误解析,只需要保留三个参数即可,第三个参数明确指定为'text/csv'。
3. 后端要设置正确的响应头
你的后端代码目前只返回了文件路径和名称,没有设置关键的响应头,这也是前端解析异常的原因之一。确保后端返回时添加以下响应头(以Express为例):
const getCandidateTemplate = async (req, res) => { try { const filePath = './src/templates/candidate_upload_template.csv'; // 确保服务器上的文件本身是CSV格式 // 设置响应头指定文件类型和下载属性 res.setHeader('Content-Type', 'text/csv'); res.setHeader('Content-Disposition', 'attachment; filename="candidate_upload_template.csv"'); res.sendFile(filePath); } catch (e){ throw new ServerError("server error"); } };
额外提醒:要确认服务器上的模板文件本身确实是CSV格式,而不是把TXT文件直接改了文件名,否则即使后缀正确,文件内容还是会有问题。
4. 创建Blob时明确指定MIME类型
在生成Blob对象时,也可以直接指定MIME类型,进一步确保文件格式的正确性:
const blob = new Blob([response.data], { type: 'text/csv' }); download(blob, 'candidate_upload_template.csv', 'text/csv');
把这些步骤结合起来,应该就能解决下载后文件被保存为TXT格式的问题了。
内容的提问来源于stack exchange,提问作者Ujith Isura
相关产品推荐
相关产品推荐

