Как загрузить изображение из Azure DevOps Services HTML Поле с использованием API - PullRequest
0 голосов
/ 13 февраля 2020

Я хочу загрузить сведения о рабочем элементе из нашего экземпляра Azure DevOps Services и поместить его sh на наш локальный TFS-сервер.

Я дошел до подключения к серверу DevOps с помощью WorkItemTrackingHttpClient в C#. Я могу перебирать рабочие элементы, которые я нахожу, и просматривать поля, загружать вложения, используя GetAttachmentContentAsyn c. Пока все хорошо.

Последняя деталь, которую мне нужно завершить, - это также скопировать / загрузить встроенные изображения, которые находятся в полях HTML Description. Я могу извлечь код HTML из поля HTML и увидеть в нем одну или несколько строк img sr c.

<img src=\"https://dev.azure.com/tenant/projectguid/_apis/wit/attachments/d928c8ee-f493-4d30-99a5-f62b7f36a2f7?fileName=grafik.png"\>

Все они имеют имя файла grafik.png , но другой файл Guid.

Я пытался использовать GetAttachmentContentAsyn c для загрузки по этому руководству, но это не сработало. Я пытался загрузить файл, используя обычный поток, но это не сработало, я предполагаю, что это связано с аутентификацией. Файлы изображений также не отображаются как обычные вложения.

Итак, вопрос в том, как я могу загрузить это изображение из Azure DevOps из моего C# клиента, который аутентифицируется с помощью PAT через PAT API. Можно ли использовать API-вызов для загрузки этого файла? я не смог его найти, или я могу как-то аутентифицировать WebClient с этим PAT, чтобы он мог его скачать?

1 Ответ

0 голосов
/ 13 февраля 2020

После дальнейшего устранения неполадок теперь GetAttachmentContentAsyn c может загрузить изображение.

Для всех, кто может искать подобное решение. Это то, что я сделал

Код, использованный для загрузки

publi c string DownloadAttachment (строка URL, строка fileName, int workItemId)

    {
        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;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...