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

Node.js中使用Axios下载文件时,如何获取浏览器默认文件名保存?

在Node.js中通过Axios下载文件时使用API返回的默认文件名

我需要从远程API下载文件,但希望使用浏览器访问该URL时自动下载的默认文件名来保存文件。例如,当我点击链接https://myapi.com/files/4hjiguo4ho45946794526975429时,浏览器会自动下载名为myfile20180601.txt的文件。请问在Node.js中如何实现这一需求?

我的代码如下:

axios({ 
  method: 'get', 
  url: 'https://myapi.com/files/4hjiguo4ho45946794526975429', 
  responseType: 'stream', 
  headers: { Authorization: 'Basic KJVEB46287blablablatoken' } 
}) 
.then(res => res.data.pipe(fs.createWriteStream(`${/* filename */}.txt`))) 
.catch(err => console.error(err));

嘿,这个需求其实挺常见的,核心就是解析API响应头里的Content-Disposition字段——浏览器就是靠这个字段识别默认下载文件名的。我来帮你修改代码实现这个功能:

实现思路

  1. 从响应头res.headers['content-disposition']中提取文件名信息
  2. 处理特殊编码的文件名(比如UTF-8编码的中文文件名)
  3. 用提取到的真实文件名创建文件写入流

修改后的完整代码

const axios = require('axios');
const fs = require('fs');
const { parse } = require('content-disposition'); // 推荐用这个成熟的包解析头信息

axios({
  method: 'get',
  url: 'https://myapi.com/files/4hjiguo4ho45946794526975429',
  responseType: 'stream',
  headers: {
    Authorization: 'Basic KJVEB46287blablablatoken'
  }
})
.then(res => {
  // 先检查响应头是否包含Content-Disposition
  const contentDisposition = res.headers['content-disposition'];
  if (!contentDisposition) {
    throw new Error('响应头未返回Content-Disposition字段,无法获取默认文件名');
  }

  // 解析头信息,自动处理编码后的文件名
  const parsedInfo = parse(contentDisposition);
  const filename = parsedInfo.parameters.filename;

  console.log('获取到的默认下载文件名:', filename);

  // 用真实文件名写入文件
  res.data.pipe(fs.createWriteStream(filename));
})
.catch(err => console.error('下载出错:', err));

额外说明

  • 如果你不想额外安装依赖,可以用正则自己提取文件名(但对特殊编码支持不好):
    function extractFilename(header) {
      const matchResult = header.match(/filename="?([^"]+)"?/);
      return matchResult ? matchResult[1] : 'default-file.txt';
    }
    
  • 使用content-disposition包的话,记得先安装:npm install content-disposition
  • 建议添加异常 fallback,比如当API未返回文件名时,设置一个默认文件名避免报错

内容的提问来源于stack exchange,提问作者AlexNikolaev94

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:00:20