Невозможно открыть файл Excel, прикрепленный к рабочему элементу в Azure Devops - PullRequest
0 голосов
/ 15 марта 2020

Я создаю инструмент для присоединения файлов Excel к рабочим элементам, используя Azure Devops REST API. Я могу добавить файл Excel к рабочему элементу, но когда я пытался открыть, он просто говорит "файл для расширение файла недействительно ". Я ценю любые предложения или любые входные данные.

Отредактировано: согласно предложению Lance-Li, я преобразовал файл excel в байты и отправил его в теле запроса, как показано ниже

 byte[] filedata = File.ReadAllBytes(filepath);
dynamic WorkItem = new List<dynamic>() {

                new
                {

                  filedata,
                }

            };
    var WorkItemValue = new StringContent(JsonConvert.SerializeObject(WorkItem),Encoding.UTF8, "application/json-patch+json");

сейчас отправка вышеуказанного значения рабочего элемента в метод post с помощью content-type = application \ octet-stream. но я все еще сталкиваюсь с проблемой формата. Я сделал какую-либо ошибку?

1 Ответ

1 голос
/ 16 марта 2020

Обычно мы вызываем Вложения-Создать (Загрузить вложение в хранилище вложений), а затем Добавить вложение (Добавить вложение из хранилища вложений в рабочий элемент), чтобы добавить локальное вложение на рабочем месте.

Причина проблемы:

Мы должны быть осторожны, когда загружаем вложение, используя первый оставшийся API (Вложения - Создать). В почтовом запросе filename=xxx не получает путь к файлу. не будет извлекать файл с рабочего стола или из других папок.

После нескольких тестов я воспроизвел ту же проблему, что и у вас. Также я обнаружил, что если мы запустим запрос на публикацию, он на самом деле просто создаст один новый файл с тем же именем вместо выборки локального файла. Например, если у меня есть локальный файл test.txt с содержимым just for test, в моем теле запроса у меня есть "User text content to upload", в результате получается одно вложение с именем test.txt с содержимым "User text content to upload".

* 1026. * Так что я думаю, что вы можете загрузить xx.xlsx файл с текстовым содержимым. Вот почему мы получили ошибку file foramt not valid.

Два обходных пути:

1. Загрузите его как двоичный файл , преобразуйте файл excel в двоичный файл и вставьте двоичный контент в тело запроса. (О том, возможно ли преобразовать Excel и как это сделать, это еще одна проблема, поэтому я не буду здесь говорить об этом)

2. Другой найденный мной обходной путь - использование команды -Infile в Invoke-RestMethod и это работает хорошо!

(Если вы используете что-то вроде postman для запуска API, contenttype => application/octet-stream, body => binary)

Мой скрипт Powershell о Attachments-Create:

$token = "YourPat"

$url="https://dev.azure.com/YourOrgName/_apis/wit/attachments?fileName=YourFileName.xlsx&api-version=5.1"

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

$filepath="YourFilePath\YourFileName.xlsx"

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Post -InFile $filepath -ContentType application/octet-stream

Write-Host $response

Надеюсь, что все вышеперечисленное помогает :) А так как причина оригинальной проблемы заключается только в использовании первого API, поэтому я не буду говорить о втором здесь ...

Кроме того: Если кто-то использует C# клиентские API для загрузки двоичного файла, попробуйте использовать contenttype application\json, информация из dhulipala murali . И если кто-то использует PS / почтальон, application/octet-stream хорошо работает на моей стороне.

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