You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 12:27:42