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

Chrome上传无效大文件至NestJS接口时响应加载失败问题求助

解决方案

问题出在请求生命周期的时机:你的拦截器是在文件完全上传到服务器后才触发验证,而Chrome在大文件上传过程中,若服务器突然中断连接(抛400错误),会因为未完整接收响应数据而显示“Failed to Load Response Data”。Postman对这类场景的处理更宽松,所以表现正常。

直接的修复方式是在文件上传阶段就提前验证扩展名,而不是等到文件接收完成后再通过拦截器处理,具体步骤如下:

1. 使用Multer的fileFilter提前拦截无效文件

在NestJS的FileInterceptor配置中添加fileFilter,让Multer在文件开始上传前就检查扩展名,直接拒绝无效文件并返回错误:

import { BadRequestException } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import * as path from 'path';

// 在你的控制器方法中
@Post('upload')
@UseInterceptors(FileInterceptor('file', {
  fileFilter: (req, file, callback) => {
    // 提取并统一转为小写的文件扩展名
    const fileExt = path.extname(file.originalname).toLowerCase();
    // 验证扩展名是否为.xls
    if (fileExt !== '.xls') {
      // 抛出INVALID_FILE_FORMAT错误,直接终止上传
      return callback(new BadRequestException('INVALID_FILE_FORMAT'), false);
    }
    // 验证通过,继续上传
    callback(null, true);
  },
  // 可选:可以添加文件大小限制,避免不必要的大文件上传
  limits: {
    fileSize: 10 * 1024 * 1024 // 限制为10MB
  }
}))
async handleFileUpload(@UploadedFile() file: Express.Multer.File) {
  // 后续业务逻辑
}

2. 移除原拦截器中的扩展名验证逻辑

既然已经在Multer层面提前拦截,原拦截器中针对扩展名的验证可以删除,避免重复处理。

这样调整后,服务器会在文件上传开始前就返回400错误,Chrome能完整接收响应数据,不会再出现“Failed to Load Response Data”的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:12:28