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

Node.js使用express.static托管文件时如何修改下载文件名去除UUID前缀

简便实现方案

直接利用express.static原生支持的setHeaders配置项,修改响应头的Content-Disposition字段即可实现,不需要额外引入中间件或重写路由逻辑。
实现原理:浏览器下载文件时会优先读取Content-Disposition响应头中指定的filename作为本地保存的文件名,和服务器上存储的实际文件名无关。

代码示例

const path = require('path');
const express = require('express');
const app = express();

app.use('/files', express.static('uploads', {
  setHeaders: (res, filePath) => {
    // 提取带UUID前缀的原始文件名
    const fullFileName = path.basename(filePath);
    // 去掉UUID前缀:标准UUID长度为36位,加1位下划线前缀分隔符,直接从第37位截取即可
    // 该方式兼容文件名本身包含下划线的场景,稳定性更高
    const downloadFileName = fullFileName.slice(37);

    // 设置响应头,filename*字段兼容中文文件名避免乱码
    res.setHeader(
      'Content-Disposition',
      `inline; filename*=UTF-8''${encodeURIComponent(downloadFileName)}`
    );
  }
}));

// 其余服务逻辑...
app.listen(3000);

配置说明

  • 如果需要强制触发浏览器下载而不是预览图片、PDF等可识别格式的文件,把上述代码中的inline改成attachment即可。
  • 如果你确定文件名前缀后只有一个下划线,也可以用按下划线分割的方式截取:const downloadFileName = fullFileName.split('_').slice(1).join('_')。
  • 务必对文件名做encodeURIComponent编码,避免中文、特殊字符文件名出现乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:54:02