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

使用Curl向Nexus上传NuGet包返回400错误是什么原因

问题原因

返回的400错误已经明确给出根因:Multipart request required。
你当前使用curl --upload-file 参数直接PUT文件的方式,是将nupkg文件直接作为整个请求体发送,不符合NuGet协议对包上传接口的格式要求——NuGet上传接口强制要求请求为multipart/form-data编码的多部分表单格式,该错误和目标仓库是否已存在同名包无关。
另外需要提前确认:你要上传的目标仓库package_nuget_for_portal必须是**hosted(托管)**类型的NuGet仓库,group(仓库组)、proxy(代理)类型的NuGet仓库本身不支持包上传操作,即使请求格式正确也会报错。

修复方案

方案1:调整curl命令格式(继续用curl上传)

放弃--upload-file参数,改用-F参数构造符合要求的multipart表单请求,正确命令如下:

curl -v -u admin:pwd \
  -F "package=@./azure.core.1.24.0.nupkg" \
  http://10.20.1.78:8081/repository/package_nuget_for_portal/

注意要点:

  • 表单字段名固定为package,这是NuGet上传接口的强制要求,不能自定义
  • 本地文件路径前必须加@标识,告知curl读取本地文件内容作为表单字段值
  • 请求地址直接填仓库根路径即可,不需要手动拼接nupkg文件名
  • 不要手动添加Content-Type请求头,curl使用-F参数时会自动生成带正确boundary分隔符的multipart/form-data头,手动指定反而会导致boundary缺失触发格式错误

方案2:使用官方NuGet客户端推送(推荐)

手动构造curl请求容易出现格式兼容问题,优先使用NuGet官方客户端推送,稳定性更高:

  1. 首先将Nexus NuGet仓库添加为本地NuGet源:
nuget sources add -Name NexusPortalRepo -Source http://10.20.1.78:8081/repository/package_nuget_for_portal/ -Username admin -Password pwd
  1. 执行包推送命令:
nuget push ./azure.core.1.24.0.nupkg -Source NexusPortalRepo

如果使用的是NuGet V3版本的API,源地址填V3格式的http://10.20.1.78:8081/repository/package_nuget_for_portal/index.json即可。

内容的提问来源于stack exchange,提问作者eli shani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:36:33