Загрузка нескольких файлов через Powershell Invoke-RestMethod - PullRequest
1 голос
/ 14 февраля 2020

Я пытаюсь загрузить файл в Webex Teams (приложение для обмена сообщениями), используя API через Powershell. Я получил это для работы с Python, но не могу заставить его работать с Powershell. Не уверен, что мне здесь не хватает.

Вот мой Python код , который работает для загрузки файлов :

from requests_toolbelt import MultipartEncoder
import requests
filepath = r'C:\Users\user\Documents\myfile.txt'
filetype = 'text/csv'
roomId = 'Y2lzY2........'
token = 'MDZlM2Ni.......'
url = "https://api.ciscospark.com/v1/messages"
my_fields={'roomId': roomId, 'text': 'Hello World', 'files': ('myfile', open(filepath, 'rb'), filetype)}
m = MultipartEncoder(fields=my_fields)
r = requests.post(url, data=m, headers={'Content-Type': m.content_type, 'Authorization': 'Bearer ' + token})

Вот мой код Powershell , который работает для отправки сообщений :

$BearerToken = "MDZlM2Ni........."
$SpaceId = "Y2lzY2........."
$body = @{roomId = $SpaceId; text = "Hello World"} | ConvertTo-Json
$Url = "https://api.ciscospark.com/v1/messages"
$Headers = @{"Authorization" = "Bearer $BearerToken"; "Content-Type" = "application/json"}
Invoke-RestMethod -Method POST -Headers $Headers -Uri $Url -Body $body

Вот мой код Powershell который не работает для загрузки файлов . Что мне здесь не хватает по сравнению с Python кодом выше?

$BearerToken = "MDZlM2Ni........."
$SpaceId = "Y2lzY2........."
$body = @{roomId = $SpaceId; text = "Hello World"; files = 'C:\Users\user\Documents\myfile.txt; type=text/csv'} | ConvertTo-Json
$Url = "https://api.ciscospark.com/v1/messages"
$Headers = @{"Authorization" = "Bearer $BearerToken"; "Content-Type" = "multipart/form-data"}
Invoke-RestMethod -Method POST -Headers $Headers -Uri $Url -Body $body

1 Ответ

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

Я не python эксперт, но, увидев оба кода, здесь есть некоторые неясности.

Любой ответ, который вы получаете от сервера, стоит поделиться, и я просто выполнил некоторые из ваших команд, которые показывают что тело хотя и отформатировано json, но путь к файлу обрабатывается как строка, что означает, что файл не присоединяется

{
    "roomId":  "Y2lzY2.........",
    "files":  "C:\\Users\\user\\Documents\\myfile.txt; type=text/csv",
    "text":  "Hello World"
}

Выше выводится тело, когда я выполняю ваш код так как вы видите, что данные из файла не загружены и в коде Python вы открываете файл и отправляете его на запрос, вы можете использовать указанный ниже код для достижения этого

$file = Get-Content C:\sample.txt 
$body = @{roomId = $SpaceId; text = "Hello World"; files=$file+'; type=text/csv'} | ConvertTo-Json
Write-Output $body

Это загружает содержимое файла в виде простого текста и добавляет его к json.

Код ниже читает все байты и присоединяет его к телу как вложение

$file = Get-ChildItem -Path "C:\\sample.txt"
$file = [System.IO.File]::ReadAllBytes($file.FullName)
$body = @{roomId = $SpaceId; text = "Hello World"; files=$file+'; type=text/csv'} | ConvertTo-Json
Write-Output $body

Надежда это помогает.

...