409:使用 REST API 在 Artifactory 中复制工件时发生冲突错误

Posted

技术标签:

【中文标题】409:使用 REST API 在 Artifactory 中复制工件时发生冲突错误【英文标题】:409: conflict error while copying Artifacts in Artifactory using REST API 【发布时间】:2018-11-03 04:58:24 【问题描述】:

我正在尝试通过 PowerShell 在 Artifactory 的同一存储库中制作工件的副本。下面是我用来实现这一点的代码。我得到 "Invoke-RestMethod: The remote server returned an error: (409) Conflict." 执行此代码时出错。

调用-RestMethod -Uri

"http://server/artifactory/api/copy/repoName/Package1.nupkg?to=/repoName/Package2.nupkg" -Method POST -UseDefaultCredentials

感谢任何帮助!

【问题讨论】:

使用 PUT 方法。 POST 用于创建。 PUT 用于创建或更新。 谢谢曼莫汉!我尝试使用 PUT 而不是 POST 并得到“Invoke-RestMethod:远程服务器返回错误:(405)方法不允许。”错误。 【参考方案1】:

我在尝试使用文件夹时遇到了这个问题。 如果您也是这种情况,请先尝试 PUT 文件夹路径,并确保对此调用和 POST 副本都进行身份验证:

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("$user:$apikey"));

# Create path first
Invoke-WebRequest -Uri "https://server/artifactory/targetRepo/targetPath" `
    -Method PUT `
    -Headers @ 'Authorization' = "Basic $($token)"

# Copy item
Invoke-WebRequest -Uri "http://server/artifactory/api/copy/repoName/path/Package1.nupkg?to=/targetRepo/targetPath/Package2.nupkg" `
    -Method POST `
    -Headers @ 'Authorization' = "Basic $($token)"

【讨论】:

这让情况变得更糟。它创建一个零大小的工件“targetPath”而不是文件夹【参考方案2】:

我知道这是一个老问题,但是当我尝试将工件复制到已经存在的目的地时遇到了这个错误(基本上,用另一个副本替换具有完全相同名称的工件)。我的用户没有 repo 的删除权限。确切的错误文本是:

  "messages" : [ 
    "level" : "ERROR",
    "message" : "User doesn't have permissions to override <artifact-name>. Needs delete permissions."
   ]

【讨论】:

以上是关于409:使用 REST API 在 Artifactory 中复制工件时发生冲突错误的主要内容,如果未能解决你的问题,请参考以下文章

REST API 设计中的查找或创建习语?

使用 bigtable 和 python,像 google.api_core.exceptions.Aborted: 409 Error while reading table 这样的异常的原因是啥?

Lync UCWA - 创建应用程序提供 HTTP 409:冲突错误

BigQuery Python 409 已经存在:表格

[Knowledge-based AI] {ud409} Lesson 23: 23 - Learning by Correcting Mistakes

如何在 django-rest-framework 中为 API 使用 TokenAuthentication