【问题标题】:DevOps description field image download / Save fileDevOps 描述字段图像下载/保存文件
【发布时间】:2020-05-12 20:40:12
【问题描述】:

自从我们转移到 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 写入文件?

或者我是不是走错路了?

谢谢

【问题讨论】:

  • 嗨艾伦,我没有看到您将凭据传递给常规 Web 客户端,也许这只是您粘贴的内容,但您应该在创建客户端时传递凭据或在调用之前将凭据作为属性传递下载。您也可以尝试使用当前用户凭据进行下载,如果他有权访问 TFS,则常规 Web 客户端下载应该可以正常工作。
  • 这是我遇到的麻烦,我的应用程序确实在 VssCredentials 对象中保存了 TFS 服务器的凭据。 Web 客户端代码是旧方法。但是,当尝试解决此问题时,webclient 对象将不接受 VssCredentials 对象作为参数。那么如何将其转换为 system.net 凭证对象?我们都可以访问 TFS 服务器,如果身份验证过时,我们会被要求在应用启动时进行身份验证(在 VssCredentials 中)。就目前而言,当我尝试使用 webclient 对象时,系统 (IE) 缓存的凭据没有被使用
  • 我可以知道您使用哪个 tfs 版本吗?如果方便,您能否分享一个简单的示例(删除个人信息并将 PAT 替换为 xxx)以重现问题。我们希望在我们这边进行测试,以更好地解决此问题。
  • @AlanRampton 尝试使用 Credentials 属性,请参见此处:docs.microsoft.com/en-us/dotnet/api/…

标签: c# image tfs azure-devops azure-devops-rest-api


【解决方案1】:

试试这个:

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

    // ....      
}

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

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

【讨论】:

    猜你喜欢
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2018-12-26
    • 1970-01-01
    相关资源
    最近更新 更多