首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用API从Azure DevOps服务HTML下载图像

如何使用API从Azure DevOps服务HTML下载图像
EN

Stack Overflow用户
提问于 2020-02-13 15:57:28
回答 1查看 899关注 0票数 2

我想从Azure DevOps服务实例下载工作项详细信息,并将其推入本地TFS。

我甚至可以使用WorkItemTrackingHttpClient在C#中连接到DevOps服务器。我可以遍历我找到的工作项,查看字段,使用GetAttachmentContentAsync.下载附件。到目前为止一切顺利。

我需要完成的最后一个细节是复制/下载HTML描述字段中的嵌入式图像。我可以从HTML字段中提取HTML代码,并在其中看到一个或多个img行。

代码语言:javascript
运行
复制
<img src=\"https://dev.azure.com/tenant/projectguid/_apis/wit/attachments/d928c8ee-f493-4d30-99a5-f62b7f36a2f7?fileName=grafik.png"\>

所有这些都有fileName grafik.png,但是有一个不同的fileGuid。

我试着使用GetAttachmentContentAsync在这个guid上下载,但这是行不通的。我试着用普通的Stream下载文件,但这不起作用,我想这是身份验证造成的。图像文件也不显示为正常附件。

所以问题是,如何从我的C#客户端从Azure C#下载这个映像,该客户端是通过API使用PAT进行身份验证的。有API调用可以用来下载这个文件吗?我还没有找到它,或者我可以用这个PAT对WebClient进行身份验证,以便它可以下载它吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-13 16:20:05

经过进一步的故障排除,现在GetAttachmentContentAsync可以下载映像了。

对于任何可能正在寻找类似解决方案的人来说。这就是我所做的

使用标准指令( https://learn.microsoft.com/en-us/azure/devops/integrate/quickstarts/work-item-quickstart?view=azure-devops

  • Extract
  • src从HTML
  • 提取GUID并下载此图像

)

用于下载的代码

公共字符串DownloadAttachment(string,string fileName,int workItemId)

代码语言:javascript
运行
复制
    {
        string[] urlSplit = url.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
        int index = urlSplit.Length - 1;
        Guid attGuid = new Guid(urlSplit[(index)]);

        if (fileName == string.Empty)
        {
            fileName = urlSplit[(index)] + ".png";
        }
        return DownloadAttachment(attGuid, fileName, workItemId);
    }

    public string DownloadAttachment(Guid attGuid, string fileName, int workItemId)
    {
        var credentials = new VssBasicCredential(string.Empty, this.personalAccessToken);

        // create instance of work item tracking http client
        using (var httpClient = new WorkItemTrackingHttpClient(this.uri, credentials))
        {
            Stream attStream = httpClient.GetAttachmentContentAsync(attGuid).Result;

            string folderPath = @"C:\Temp\WorkItemAttachments\" + workItemId;
            string fileFullPath = folderPath + "\\" + fileName;
            Directory.CreateDirectory(folderPath);

            using (FileStream writeStream = new FileStream(fileFullPath, FileMode.Create, FileAccess.ReadWrite))
            {
                attStream.CopyTo(writeStream);
            }
        }

        return fileName;

    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60211912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档