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

如何用Go Resty编写与指定PUT上传zip到Artifactory的CURL等效请求

问题根因分析
  • 你尝试的第二种、第三种写法使用的SetFile、SetFileReader是Resty专为multipart/form-data表单上传设计的API,调用后会自动覆盖你手动设置的Content-Type,强制使用表单格式请求,不符合Artifactory要求的二进制流直接PUT逻辑
  • 你抓包的请求路径为/artifactory/example-local-repo/crash.zip,和curl正常调用的路径/artifactory/example-repo-local/crash.zip相比仓库名拼写颠倒,Artifactory匹配不到对应仓库的PUT路由,也是触发405错误的核心原因
  • 第一种写法逻辑方向正确,报错大概率是路径错误、contentType变量值不正确、文件读取异常三类问题导致
正确实现代码
import (
    "os"
    "path/filepath"
)

// 注意remotePath格式为「仓库名/文件路径」,示例:example-repo-local/crash.zip
uri := "/artifactory/" + remotePath

// 打开本地待上传文件
file, err := os.Open(localPath)
if err != nil {
    return err
}
defer file.Close() // 执行结束后关闭文件句柄

// 直接传递文件流作为请求Body,不要使用任何SetFile相关API
resp, err := client.R().
    SetBody(file).
    SetHeader("Content-Type", "application/zip").
    Put(uri)

if err != nil {
    return err
}

// 可选:校验返回状态码确认上传成功,Artifactory上传成功默认返回201
if resp.StatusCode() != 201 {
    // 自定义错误处理逻辑
}
校验要点
  • 抓包确认请求头Content-Type为application/zip,无multipart相关boundary参数
  • 确认请求路径和curl正常调用的路径完全一致
  • 确认鉴权信息拥有目标仓库的写入权限

内容的提问来源于stack exchange,提问作者Christian Bongiorno

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:27:03