Codex中文件校验需前后端协同:前端用accept/max或JS检查类型大小作提示,后端用multer的fileFilter、limits及file-type/busboy深度校验真实类型与大小。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Codex中校验上传文件的类型和大小,是为了防止用户上传恶意文件或超大文件导致服务异常。必须在前端和后端同时设防,仅靠前端拦截可被绕过,后端校验才是最终防线。
前端校验:限制选择阶段的文件类型与大小
方法一:使用HTML input 的 accept 和 max 限制
在 <input type="file"> 标签中添加 accept="image/png,image/jpeg" 指定允许的 MIME 类型,再添加 onchange="checkFileSize(this)" 绑定校验函数。
方法二:JavaScript 手动读取文件对象校验
在事件监听中获取 event.target.files[0],用 file.type 匹配白名单(如 file.type === 'image/jpeg'),再用 file.size > 5 * 1024 * 1024 判断是否超 5MB。注意:file.type 可被伪造,仅作辅助提示,【不能替代后端校验】。
后端校验:以 Node.js + Express 为例
第一步:启用 multer 中间件并配置基础选项
安装 multer 后,在路由前初始化: const upload = multer({ storage: memoryStorage }),storage 必须设为 memoryStorage 或 diskStorage,否则无法读取文件头信息。
第二步:编写自定义 fileFilter 函数
通过本地 Codex 或 OpenClaw OAuth 凭证直接调用 ChatGPT/Codex Responses 的 image_generation 工具来生成或编辑光栅图像,然后保存
在 multer 配置中传入 fileFilter: (req, file, cb) => { ... },在里面检查 file.mimetype 是否在预设白名单内(如 ['image/jpeg', 'image/png']),不是则调用 cb(null, false) 并返回错误响应;是则继续。
第三步:限制单个文件大小
在 multer 配置中设置 limits: { fileSize: 5 * 1024 * 1024 },单位是字节。超出时 multer 会自动拒绝并抛出 MulterError: LIMIT_FILE_SIZE,需用 try-catch 或全局错误中间件捕获并返回 413 状态码。
深度校验:验证文件真实类型(防扩展名/Content-Type 伪造)
方法一:使用 file-type 库读取文件魔数
在 fileFilter 内部,用 file.buffer(需配置 storage: memoryStorage)调用 fileType.fromBuffer(file.buffer) 获取真实 MIME 类型。若结果为 null 或类型不匹配,立即拒绝。
方法二:用 busboy 手动解析 multipart 流(适用于大文件场景)
跳过 multer,改用 busboy 监听 'file' 事件,在回调中对流式数据截取前 4–8 字节,比对 JPEG(FF D8 FF)、PNG(89 50 4E 47)等魔数。这一步必须在内存中完成,不能等整个文件写入磁盘后再校验。

















