Как преобразовать команду загрузки файла curl в Invoke-RestMethod? - PullRequest
0 голосов
/ 21 января 2020

Я хотел бы преобразовать следующую команду:

$ curl -X POST \
-H 'Content-Type: multipart/form-data' \
-H "Session-Token: [Session Token]" \
-H "App-Token: [MyToken] " \
-F 'uploadManifest={"input": {"name": "Uploaded document", "_filename" : ["file.txt"]}};type=application/json' \
-F 'filename[0]=@file.txt' \
'http://path/to/glpi/apirest.php/Document/'

Используя команду Invoke-RestMethod. Я следую, прибыл к следующему результату, но невозможно понять, как передать эту часть этому:

"-F 'uploadManifest={"input": {"name": "Uploaded document", "_filename" : ["file.txt"]}};type=application/json' \"

Мой результат:

$header = @{} ;
$header['Session-Token'] = $session
$header['App-Token'] = $apptoken
$header['Accept'] = "application/json"
$header['Content-Type'] = "multipart/form-data"

$body_input = @{}
$body_input["name"] = "My Document"
$body_input["_filename"] = "MyDoc.txt"

$InputObjectTab = @{} ;
$InputObjectTab."input" = $body_input ;
$JsonItem = ConvertTo-Json $InputObjectTab

$FilePath = "‪C:\Users\MyUser\Downloads\test.txt" ;
$uri = "$GlpiUri/apirest.php/Document"
$GlpiDocument      = Invoke-RestMethod -uri $uri -Method Post  -Headers $header -ContentType 'image/jpg' -InFile $FilePath

Как вы понимаете, эта команда позволяет вам загрузить файл, используя REST API

Есть идеи?

1 Ответ

0 голосов
/ 28 января 2020

Я думаю, что я на правильном пути

function upload{
Param ( 
        [Parameter(Position = 0)]
        [string]$url,

        [Parameter(Position = 1)]
        [string]$filepath,

        [Parameter(Position = 2)]
        [string]$name

        )
        $filepath

        $boundary = [guid]::NewGuid().ToString()


        $headers = @{} ;
        $headers['session-token'] = $session
        $headers['App-Token'] = $apptoken

        $FileContent = [IO.File]::ReadAllText($filepath);

        $body_input = @{} 
        $body_input["name"] = "My Document"
        $body_input["_filename"] = "MyDoc.txt"


        $TableInput = @{} ; 
        $TableInput."input" = $body_input ;

        $table_body = @{} ;
        $table_body."uploadManifest" = $TableInput
        $table_body."type" = "application/json"
        $table_body."uploadFile" = $FileContent



        $TableInput = ConvertTo-Json -InputObject $TableInput -Depth 5 -Compress
        $TableInput

        Invoke-RestMethod -Uri "http://0000.000.000.00/glpi/apirest.php/Document" -ContentType "application/json" -Method Post -Headers $Headers -Body $TableInput;
        $GlpiEntities      = Invoke-RestMethod -method Post -uri $uri -Headers @{"session-token"=$session; "App-Token" = $apptoken} -Body $JsonItem -ContentType 'application/json'
}

Но когда я пытаюсь это сделать, у меня появляется эта ошибка

Invoke-RestMethod : Object reference not set to an instance of an object.
At C:\Users\SVC_SPADMIN\Documents\TEST.ps1:50 char:9
+         Invoke-RestMethod -Uri "http://000.00.0.00/glpi/apirest.php/Document" -C ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Invoke-RestMethod], NullReferenceException
    + FullyQualifiedErrorId : System.NullReferenceException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

Есть идеи?

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