tfs 2017 使用 REST 添加 png 到工作项附件 API

tfs 2017 Adding a png to a workitem attachment using the REST API

我正在尝试为 TFS 2017 中的工作项创建附件。我在 tfs REST API 中找到了 "createAttachment" 方法。

https://www.visualstudio.com/en-us/docs/integrate/extensions/reference/client/api/tfs/workitemtracking/restclient/workitemtrackinghttpclient2_2#method_createAttachment

我能够使这种方法适用于文本文件。但我需要做的是创建一个图像附件。我可以访问文件的 byteArray 内容和文件的 base64 内容。但是当我尝试传递 byteArray 时,出现以下错误:“不允许使用 405 方法”。 如果我传递图像的 base64 内容,则会创建附件但图像无效。

这是我使用的代码:

images_upload_handler: function (blobInfo, success, failure) 
   {
   var client = _RestClient.getClient();            
   var byteString = atob(blobInfo.base64());

   client.createAttachment(byteString).then(function (item)
      {
      console.log(item.url);
      });
   }

我需要找到一种方法来从 javascript 自定义控件扩展中为 tfs 工作项创建 png 附件。

谢谢

一般需要上传没有base64编码的二进制格式的图片.

如消息所述“405 Method Not Allowed”,您无法创建 png 图像。

但是您可以尝试将 png 附件上传到附件存储,然后将其附加到工作项。

  1. Upload an attachment 和示例代码:C# (UploadBinaryFile 方法)。 (请注意,您需要上传 未经 base64 编码的二进制形式的图像。)
  2. Add an attachment 和示例代码:C# (AddAttachment 方法)

这篇文章也可能有所帮助:Insert an inline image into a Work Item with the TFS API


更新:

我们无法创建 png 文件,我们只能上传现有的 png 文件并将其附加到工作项中。

我能够通过将 Post 请求的 processData 参数设置为 false 使其工作。请参阅下面的代码:

var byteString = atob(blobInfo.base64());
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++) 
   {
   ia[i] = byteString.charCodeAt(i);
   }

$.ajax(
  {
     type: "POST",
     contentType: "application/octet-stream",
     url: SERVER_URI + "_apis/wit/attachments?filename=" + blobInfo.filename() + "&api-version=1.0",
     data: ia,
     processData: false,
     headers:
        {
        'Authorization': 'Basic ' + btoa(":" + TOKEN)
        }
  }).always(function (data)
  {
     console.log(data.url);
  });