none
Invoke-Restmethod multipart/form-data mit json und bin-file RRS feed

  • Frage

  • Hallo zusammen,

    ich versuche mittels Powershell ein Request-Anfrage mit multipart/form zu versenden. 
    Laut API-Dokumentation soll die Anfrage aus einem Request-Teil in JSOn und dem File bestehen.
    Leider erhalte ich immer die Fehlermeldung "Invalid Multipart/form request" und habe leider keine Idee, wo mein Fehler liegt.

    Eine Query-Anfrage nur mit JSON funktioniert.

    Laut Doku soll die Upload-Anfrage wie folgt aussehen:

    ----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Dis-data; name="request"; Content-Type: application/json {
    "request": {
    "md5": "da855ff838250f45d528a5a05692f14e",
    "file_name": "MyFile.docx",
    "file_type": "docx",
    "features": ["te"],
    "te": {
    "reports": ["pdf", "xml"],
    "images": [
    {
    "id": "7e6fe36e-889e-4c25-8704-56378f0830df",
    "revision": 1
    },
    {
    "id": "e50e99f3-5963-4573-af9e-e3f4750b55e2",
    "revision": 1
    }
    ]
    }
    }
    }----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Dis-data; name="file"; filename="MyFile.docx" Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document
    [Binary content of MyFile.docx] ----WebKitFormBoundary7MA4YWxkTrZu0gW




    Das ist mein Code dazu:

    $url = "https://foobar/tecloud/api/v1/file/upload"
    $boundary = [System.Guid]::NewGuid().ToString()
    $filePath="C:\tmp\test.txt"
    $file = Get-Item -path $filePath
    
    $mimeType = [System.Web.MimeMapping]::GetMimeMapping($file.Name)
    
    $fileBin = [System.IO.File]::ReadAllBytes($filePath)
    #$CODEPAGE = "iso-8859-1"
    #$enc = [System.Text.Encoding]::GetEncoding($CODEPAGE)
    #$fileEnc = $enc.GetString($fileBin)
    $LF = "`r"
    
    $messageBody = @{
        request = @{ 
        file_name = $file.Name
        file_type = "sql"
        }
    }
    
    $bodyLines = (
            "----WebKitFormBoundary$boundary",
            'Content-Dis-data; name="request";',
            'Content-Type: application/json',
            (ConvertTo-Json $messageBody)+$LF,
            "----WebKitFormBoundary$boundary",
            'Content-Dis-data; name="file"; filename="test.txt"',
    "Content-Type: $mimeType"+$LF,
            $fileBin+$LF,
            "----WebKitFormBoundary$boundary"
         )
    
    
    
    
    $Response=Invoke-Restmethod -Uri $url -Method Post -ContentType "multipart/form-data; boundary=$boundary" -Body $bodyLines -verbose


    Mittwoch, 14. März 2018 11:45

Antworten