Обычно мы вызываем Вложения-Создать (Загрузить вложение в хранилище вложений), а затем Добавить вложение (Добавить вложение из хранилища вложений в рабочий элемент), чтобы добавить локальное вложение на рабочем месте.
Причина проблемы:
Мы должны быть осторожны, когда загружаем вложение, используя первый оставшийся 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
хорошо работает на моей стороне.