TFS 扩展 - 如何读取 TaskAttachment 内容

TFS Extension - How to read TaskAttachment content

我在阅读从一个扩展程序上传到另一个扩展程序的 "TaskAttachment" 的内容时遇到问题。

我正在使用此代码获取“TaskAttachment”,我正在使用正确的名称和 URL 获取它,(我有权访问无需身份验证,例如来自另一个干净的浏览器)

var taskClient = DT_Client.getClient();
taskClient.getPlanAttachments(vsoContext.project.id, "build", build.orchestrationPlan.planId, "MyExtType").then((taskAttachments) => {
$.each(taskAttachments, (index, taskAttachment) => {
   if (taskAttachment._links && taskAttachment._links.self && taskAttachment._links.self.href) {
        var link = taskAttachment._links.self.href;
        var attachmentName = taskAttachment.name;
        var fileContent = readText(link);

... 而这个 javascript 读取内容的函数 ...

var readText = function readTextFile(file)
{
alert("file = " + file);
var rawFile = new XMLHttpRequest();
rawFile.open("GET", file, false);
rawFile.onreadystatechange = function ()
{
    alert("rawFile.readyState = " + rawFile.readyState);
    alert("rawFile.status = " + rawFile.status);
    alert("rawFile.responseText = " + rawFile.responseText);

    if(rawFile.readyState === 4)
    {

        if(rawFile.status === 200 || rawFile.status == 0)
        {
            var allText = rawFile.responseText;
            alert(allText);
            return allText;
        }
    }
}
rawFile.send(null);
return "Failed to get data..";
}

问题是我收到 401 错误消息: “IIS 7.5 详细错误 - 401.2 - 未经授权

如何阅读此文件内容?有没有更好的方法将数据从 "Build Step Extension" 传输到 "UI Extension" 以在构建摘要页面(新选项卡)中显示数据?

根据 "IIS 7.5 Detailed Error - 401.2 - Unauthorized" 这很可能是由于文件系统中设置的目录权限。

确保在 IIS -> 身份验证上启用匿名访问。

右键单击它,然后单击“编辑”,然后选择 domain\username 和密码。

我刚刚使用“getAttachmentContent”方法读取了附件数据:

我不确定为什么 MS 没有在教程中引用这个函数,在文档 \ Q&A 中进行了长时间的挖掘之后我找到了它。

taskClient.getPlanAttachments(vsoContext.project.id, "build", build.orchestrationPlan.planId, "My_Attachment_Type").then((taskAttachments) => {

                     $.each(taskAttachments, (index, taskAttachment) => {

                         if (taskAttachment._links && taskAttachment._links.self && taskAttachment._links.self.href) {

                         var recId = taskAttachment.recordId;
                         var timelineId = taskAttachment.timelineId;

                         taskClient.getAttachmentContent(vsoContext.project.id, "build", build.orchestrationPlan.planId,timelineId,recId,"My_Attachment_Type",taskAttachment.name).then((attachementContent)=> {

                              function arrayBufferToString(buffer){
                                 var arr = new Uint8Array(buffer);
                                 var str = String.fromCharCode.apply(String, arr);
                                 return str;
                             }

                             var data = arrayBufferToString(attachementContent);