Node.js调用Modio API上传Modfile失败:提示缺少filedata
解决Modio API上传文件时提示filedata缺失的问题
问题根源
你的代码存在两个核心问题:
- 用
JSON.stringify()处理请求体,但Modio的文件上传要求使用multipart/form-data格式,JSON格式无法正确传递文件二进制数据 - 手动设置了
Content-Type: multipart/form-data头,但未添加必要的边界标识符;且当使用FormData时,fetch会自动生成正确的Content-Type头,手动设置反而会导致解析错误
修正后的代码
const fs = require('fs'); const path = require('path'); async function uploadModFile() { const zipPath = path.resolve('./mod.zip'); const formData = new FormData(); // 读取文件并添加到FormData const fileStream = fs.createReadStream(zipPath); formData.append('filedata', fileStream, { filename: path.basename(zipPath), type: 'application/zip' }); // 若需要其他参数,直接append到formData即可 // formData.append('version', version); // formData.append('active', active); // formData.append('changelog', changelog); // formData.append('metadata_blob', meta); try { const res = await fetch(`https://api.mod.io/v1/games/${config.modio.gameid}/mods/${config.modio.modid}/files`, { method: 'POST', headers: { 'Authorization': `Bearer ${config.modio.token}`, 'Accept': 'application/json' // 不要手动设置Content-Type,fetch会自动处理 }, body: formData }); const responseData = await res.json(); if (responseData.error) { console.error('上传失败:', responseData.error); } else { console.log('上传成功:', responseData); } } catch (err) { console.error('请求出错:', err); } }
额外说明
- 使用
FormData是处理multipart/form-data请求的标准方式,它会自动处理文件二进制数据和请求头的边界信息 - 用
createReadStream读取文件比readFileSync更高效,尤其适合大文件场景 - 若运行环境为Node.js低版本(v18以下),需手动安装
form-data包并导入使用
内容的提问来源于stack exchange,提问作者Cleardd
相关产品推荐
相关产品推荐

