【问题标题】:TFS Attachement size 0KB via REST Call通过 REST 调用的 TFS 附件大小 0 KB
【发布时间】:2018-03-01 22:20:23
【问题描述】:

每当我尝试通过 REST 调用使用 TFS WorkItem 附加附件时,附件大小为 0KB。

首先我使用以下代码在附件商店中上传附件。

https://{instance}/DefaultCollection/_apis/wit/attachments?api-version=1.0&filename="{fileName}"

我通过 rest 调用以字节数组的形式发送数据。在此之后,我将该附件与工作项一起附加。

附加附件成功,但附件大小为零 KB TFS 有问题还是我做错了什么?

我使用 C# 语言进行编程,使用 REST Sharp 访问 VSTS API

 Dim restClient = New RestClient("Server URL")

    restClient.Authenticator = New HttpBasicAuthenticator("UserId", "Password")

    Dim request = New RestRequest("API_Name", Method.POST)

    request.AlwaysMultipartFormData = False

    request.AddParameter(String.Format("{0}; charset=utf-8", contentType), File.ReadAllBytes(filePath), ParameterType.RequestBody)

    request.RequestFormat = DataFormat.Json

    Dim response As IRestResponse = restClient.Execute(request)

    Return response

我以字节为单位发送文件数据。

使用 WorkItem 附加附件。

    Dim restClient = New RestClient(ACCESS_URL)
    restClient.Authenticator = New HttpBasicAuthenticator(USER_NAME, PASSWORD)
    Dim request = New 
    RestRequest("CollectionName}/_apis/wit/workitems/{WorkItem_ID}", Method.PATCH)

   request.AddParameter("application/json-patch+json; charset=utf-8", 
   "post_Data", ParameterType.RequestBody)

   request.RequestFormat = DataFormat.Json

   Dim response As IRestResponse = restClient.Execute(request)
   Return response

Post_Data 是一个 json 字符串,它采用这种类型的数据

[{
    "op": "add",
    "path": "/relations/-",
    "value": {
      "rel": "AttachedFile",
      "url": "AttachementURI",

    }]

【问题讨论】:

  • 您在代码中使用的“contentType”是什么?我用“application/octet-stream”内容类型测试了你的代码,它工作正常。附件大小正确,可以成功打开。
  • 是的,我正在使用 application/octet-stream,但我的附件大小始终为 0K,您使用的是与我发布的完全相同的代码还是您进行了一些更改?
  • 是的,几乎一样。我在答案中添加了我的代码供您参考。

标签: tfs azure-devops


【解决方案1】:

您错过了 Post_Data 中的“属性”部分,请尝试以下操作:

[{
    "op": "add",
    "path": "/relations/-",
    "value": {
    "rel": "AttachedFile",
    "url": "AttachementURI",
    "attributes": {
       }
}]

【讨论】:

  • 有什么变化吗,和我贴的一样。这里有什么问题?
  • 不,我注意到您实际上使用的是 VB 而不是 C#,所以我创建了一个 VB 项目来测试代码。它仍然有效。您的 TFS 服务器的版本是多少?上传后如何将附件添加到工作项?您尝试上传的文件类型是什么?
  • TFS 服务器版本是 2017update2 并且它还带有 VSTS。我正在编辑我的问题,其中显示了附加工作项的代码。
  • 是 VSTS 或 TFS 2017 其余 API 依赖于平台,我使用与您使用“应用程序/八位字节流”相同的内容类型
  • 嗨,埃迪,抱歉耽搁了,我正在添加带有评论的属性,但没有这样的进展。你能帮我解决这个问题吗?
【解决方案2】:

当保持{ file-contents } 为空时,我可以重现此问题。

因此,请确保您已指定 { file-contents }

要将文件附加到工作项,upload the attachment 到 附件存储,然后将其附加到工作项。详情请见Add an attachment

上传附件:

POST https://{instance}/DefaultCollection/_apis/wit/attachments?api-version={version}&filename=Spec.txt
Content-Type: application/octet-stream
{ file-contents }

为特定工作项添加附件:

PATCH https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workitems/299?api-version=1.0
Content-Type: application/json-patch+json
[
  {
    "op": "test",
    "path": "/rev",
    "value": 3
  },
  {
    "op": "add",
    "path": "/fields/System.History",
    "value": "Adding the necessary spec"
  },
  {
    "op": "add",
    "path": "/relations/-",
    "value": {
      "rel": "AttachedFile",
      "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/attachments/098a279a-60b9-40a8-868b-b7fd00c0a439?fileName=Spec.txt",
      "attributes": {
        "comment": "Spec for the work"
      }
    }
  }
]

请参阅下面的 C# 示例以上传和添加工作项的附件:

【讨论】:

  • 感谢 Andy 的回复,我正在使用 rest sharp post 方法上传数据,在这种情况下,文件附件显示为零 kb。
  • @NitinParashar “使用休息锐化后方法”是什么意思?您是否使用上述答案(上传附件:)中提到的 REST API 来上传文件?文件附件在哪里显示零 kb?能否请您分享重现问题的详细步骤,如有必要请截屏。
  • 安迪我正在使用 C# 语言和 REST Sharp 发布附件的方法我编辑我的上述问题,请参阅澄清
  • @NitinParashar 请参考C# (UploadTextFile method)C# (AddAttachment method) 的示例
  • 安迪,我没有使用 VSTS REST API 的包装类,我正在创建我自己的模块,该模块使用 rest api 发布附件
猜你喜欢
  • 1970-01-01
  • 2015-08-24
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 2021-03-20
相关资源
最近更新 更多