Home > Software engineering >  Powershell Invoke-Webrequest encodes filename of uploaded file to Base64 when it contains german uml
Powershell Invoke-Webrequest encodes filename of uploaded file to Base64 when it contains german uml

Time:08-05

when I'm uploading a file using Powershell Invoke-Webrequest, then the filename gets encoded to base64 when it contains a german umlaut, otherwise it stays in the original encoding. Here's an example:

$path = "C:\test\Peter Müller.txt"
$uploadFormDict = @{}
$uploadFormDict['myfile'] = Get-Item -Path $path
Invoke-WebRequest -Uri "https://www.my-example-url.de/upload" -Method POST -Form $uploadFormDict

The filename that has been uploaded is '=?utf-8?B?UGV0ZXIgTcO8bGxlci50eHQ=?=', so the Base64-encoded string 'UGV0ZXIgTcO8bGxlci50eHQ=?=' of 'Peter Müller.txt' with a prepended '=?utf-8?B?'. If I upload a file named 'Peter Mueller.txt', the filename stays 'Peter Mueller.txt'. How can handle that the filename will not be encoded to Base64?

Thank you!

CodePudding user response:

I found a solution. For that I had to debug Powershell to see that they use the ContentDispositionHeaderValue and that the Name property of the FileInfo still contains the original name, but the FileName property of the ContentDispositionHeaderValue contains the encoded string (seen here).

In the documentation of ContentDispositionHeaderValue I found that "The FileName property uses MIME encoding for non-ascii characters." Here is a description of MIME encoding, which matches exactly the format of encoded string I have encountered.

The solution was in my case to decode that filename back at the server side.

  • Related