首页 > 解决方案 > DevOps 描述字段图像下载/保存文件

问题描述

由于我们已经转移到 Dev Ops,我的应用程序无法下载存储在工作项中的任何字段中的图像。

我有一个已经通过正则表达式从描述文件中删除的图像 URL。

如果我将此链接粘贴到浏览器中,则它会返回图像(因此 url 有效)

问题是在下载图像的调用中,我们没有任何身份验证凭据,并且它试图将我返回到登录页面。

我在我的应用程序中使用 dev ops 服务器进行身份验证,它会缓存这些。

readonly VssCredentials creds = new VssClientCredentials();

我尝试使用网络客户端进行呼叫,但您无法将 VSCredentuals 转换为 system.net 凭据

这以前可以工作

using (WebClient webClient = new WebClient())
{
          byte[] data = webClient.DownloadData(src);

          using (MemoryStream mem = new MemoryStream(data))
          {
                using (var yourImage = Image.FromStream(mem))
                {
                 // If you want it as Png
                 yourImage.Save(@"c:\temp\path_to_your_file.png", ImageFormat.Png);

                  // If you want it as Jpeg
                  yourImage.Save(@"c:\temp\path_to_your_file.jpg", ImageFormat.Jpeg);
                }
          }
}

我也尝试过使用

using (var client = new TfvcHttpClient(new Uri(src), creds))
{
        var itemRequestData = Create(src);
}

private static TfvcItemRequestData Create(string folderPath)
{
  return new TfvcItemRequestData
  {
    IncludeContentMetadata = true,
    IncludeLinks = true,
    ItemDescriptors =
          new[]
          {
                    new TfvcItemDescriptor
                    {
                        Path = folderPath,
                        RecursionLevel = VersionControlRecursionType.Full
                    }
          }
  };
}

但是我如何将 itemRequestData 写入文件?

还是我以错误的方式解决这个问题?

谢谢

标签: c#imagetfsazure-devopsazure-devops-rest-api

解决方案


尝试这个:

using (WebClient webClient = new WebClient())
{
    webClient.Headers.Add("Authorization", "Basic " + base64Token);
    byte[] data = webClient.DownloadData(src);

    // ....      
}

其中base64Token是您转换为 base64 的个人访问令牌,开头带有“:”。

例如,如果您的令牌是abcdefg,您需要将:abcdefg转换为 base64 并将其用作授权令牌。


推荐阅读