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

Node.js/Next.js中new File未定义报错,求可行解决方案

Node.js中使用FormData处理本地文件的解决方案

问题原因

Node.js(包括Next.js服务端代码)没有浏览器环境的File构造函数,直接调用new File会抛出ReferenceError: File is not defined错误。

替代方案

根据你的Node.js版本,有两种可靠的实现方式:

1. Node.js 18+ 原生FormData(推荐)

Node.js 18及以上版本内置了符合标准的FormData,支持直接传入Buffer,无需模拟File对象:

import fs from 'node:fs';
import { FormData } from 'node:formdata';

const imageBuffer = fs.readFileSync(filepath || '');
const body = new FormData();

// 直接传入Buffer,通过第三个参数配置文件信息
body.append('file', imageBuffer, {
  filename: originalFilename || 'unknown.png',
  type: 'image/png' // 根据实际文件类型修改,比如image/jpeg
});

2. 旧版本Node.js(<18):使用form-data第三方库

先安装依赖:

npm install form-data

然后通过库提供的API处理文件:

const fs = require('fs');
const FormData = require('form-data');

const imageBuffer = fs.readFileSync(filepath || '');
const body = new FormData();

body.append('file', imageBuffer, {
  filename: originalFilename || 'unknown.png',
  contentType: 'image/png'
});

优化:处理大文件(避免内存占用过高)

如果文件较大,推荐使用文件流替代readFileSync,减少内存消耗:

// 原生FormData示例
body.append('file', fs.createReadStream(filepath), {
  filename: originalFilename || 'unknown.png',
  type: 'image/png'
});

// form-data库示例
body.append('file', fs.createReadStream(filepath), {
  filename: originalFilename || 'unknown.png',
  contentType: 'image/png'
});

总结

无需刻意模拟浏览器的File对象,Node.js的FormData实现支持直接传入Buffer或文件流,通过配置filename和type/contentType参数,就能满足大多数接口的文件上传需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:43:24