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

如何在NestJS中让上传的文件可通过URL访问

NestJS 静态资源访问配置方案

以下为两种常用的配置方案,均可实现uploads目录下资源的公开访问:

方案1:使用官方@nestjs/serve-static模块配置

适用于需要统一管理静态资源配置的场景

  • 先安装对应依赖
    npm install @nestjs/serve-static
    注意安装的版本要和你项目中@nestjs/core的版本保持一致,避免兼容报错
  • 在根模块app.module.ts中引入并配置模块
import { Module } from '@nestjs/common';
import { ServeStaticModule } from '@nestjs/serve-static';
import { join } from 'path';

@Module({
  imports: [
    ServeStaticModule.forRoot({
      // 配置静态资源的实际存放路径
      rootPath: join(__dirname, '..', 'uploads'),
      // 配置客户端访问的路由前缀
      serveRoot: '/uploads',
    }),
  ],
})
export class AppModule {}

方案2:直接使用Express原生中间件配置

适用于不想引入额外模块的场景(NestJS默认使用Express作为HTTP适配器)

  • 在启动文件main.ts中添加中间件配置
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as express from 'express';
import { join } from 'path';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  // 绑定静态资源路由
  app.use('/uploads', express.static(join(__dirname, '..', 'uploads')));
  await app.listen(3000);
}
bootstrap();

常见问题排查

  • 路径校验:如果访问返回404,先打印配置中join(__dirname, '..', 'uploads')的实际输出,确认路径和你存放上传文件的uploads目录完全匹配
  • 权限校验:确认运行Node服务的系统用户对uploads目录有可读权限
  • 路由冲突:如果项目中存在/uploads开头的自定义接口路由,会和静态资源路由冲突,需要调整其中一方的前缀

配置完成后重启服务,即可通过http://你的服务地址/uploads/图片文件名直接访问对应资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:18:02