ADO:通过HTTP REST请求上传一个附件到Azure DevOps



我们正在使用ADO服务器2019,作为一个更大的项目的一部分,我需要上传一些电子邮件到ADO环境附加到工作项。我已经弄清楚你首先需要上传附件,将附件ID传递给工作项补丁请求,并从工作项结束添加关系,但是我无法弄清楚的是在哪里选择实际的电子邮件或任何项目来上传。

在MS文档中给出的示例向您展示了如何发布上传,但它没有上传任何内容,它只是创建一个空白页面。

POST https://{instance}/fabrikam/_apis/wit/attachments?fileName=textAsFileAttachment.txt&api-version=5.0

需要构建一个请求体,以定义附件来自我可以收集的内容,但是没有任何类型的文档围绕这一点,通过HTTP简单地发布它。

我们正在使用Blue Prism,所以使用c#是一个选项,但不是理想的。

提前感谢。

请按照以下步骤操作:

1。上传文本文件

POST https://{instance}/fabrikam/_apis/wit/attachments?fileName=textAsFileAttachment.txt&api-version=5.0

请求正文:"User text content to upload"

2。您将得到如下响应:

{
"id": "6b2266bf-a155-4582-a475-ca4da68193ef",
"url": "https://fabrikam:8080/tfs/_apis/wit/attachments/6b2266bf-a155-4582-a475-ca4da68193ef?fileName=textAsFileAttachment.txt"
}

从响应中复制此url。

3。向工作项添加附件:

POST https://{instance}/fabrikam/_apis/wit/attachments?fileName=textAsFileAttachment.txt&api-version=5.0

请求主体:

[
{
"op": "add",
"path": "/relations/-",
"value": {
"rel": "AttachedFile",
"url": "https://fabrikam:8080/tfs/_apis/wit/attachments/6b2266bf-a155-4582-a475-ca4da68193ef?fileName=textAsFileAttachment.txt",
"attributes": {
"comment": "Spec for the work"
}
}
}
]

替换请求正文的url。

如果创建新的附件,则必须传递文件内容。上传二进制文件

https://dev.azure.com/fabrikam/_apis/wit/attachments?fileName=imageAsFileAttachment.png& api版本= 6.1 -preview.3

[二进制文件内容]">

下面是一个通过Powershell的例子:

$user = ""
$token = "<personal access token>"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
$org = "org_name"
$teamProject = "teamproject"
$wiId = "work item Id"
$folderPath = "c:/temp"
$fileName = "some_file.zip"
$createAttachmetUrlTemplate = "https://dev.azure.com/$org/$teamProject/_apis/wit/attachments?fileName={fileName}&api-version=5.0"
$updateWIUrlTemplate = "https://dev.azure.com/$org/_apis/wit/workitems/{id}?api-version=5.0"
$wiBodyTemplate = "[{`"op`": `"add`",`"path`": `"/relations/-`",`"value`": {`"rel`": `"AttachedFile`",`"url`": `"{attUrl}`", `"attributes`": {`"comment`": `"Spec for the work`"}}}]"
function InvokePostRequest ($PostUrl, $body)
{   
return Invoke-RestMethod -Uri $PostUrl -Method Post -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}  -Body $body
}
function InvokePatchRequest ($PatchUrl, $body)
{   
return Invoke-RestMethod -Uri $PatchUrl -Method Patch -ContentType "application/json-patch+json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}  -Body $body
}
$bytes = [System.IO.File]::ReadAllBytes("$folderPath/$fileName")
$createAttachmetUrl = $createAttachmetUrlTemplate -replace "{filename}", $fileName
$resAtt = InvokePostRequest $createAttachmetUrl $bytes
$updateWIUrl = $updateWIUrlTemplate -replace "{id}", $wiId
$wiBody = $wiBodyTemplate -replace "{attUrl}", $resAtt.url
InvokePatchRequest $updateWIUrl $wiBody 

相关内容

最新更新