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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:25:17