Powershell: как отправить файлы Excel (.xlsx) POST в запрос multipart / form-data? - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь отправить некоторые данные на сервер Express, используя Multer в качестве промежуточного программного обеспечения для загрузки файлов.

Запрос включает несколько текстовых полей, файл API (.yaml) и .xlsx файл. Я могу успешно опубликовать файл .yaml и текстовые поля, но не файл Excel.

Ниже показано, как я построил вызов multipart / form-data:

# ----- BUILD & EXECUTE API CALL ------

# Set up the boundary, separator and file encoding to use
$boundary = [System.Guid]::NewGuid().ToString() 
$LF = "`r`n"
$enc = [System.Text.Encoding]::GetEncoding("iso-8859-1")

# Get the filename of the .yaml file
$apiFileName = Split-Path $apiFilePath -leaf

# Encode the .yaml file contents
$apiDefBin = [IO.File]::ReadAllBytes("$apiFilePath")
$apiDefEnc = $enc.GetString($apiDefBin)

# Get the filename of the .xlsx file
$excelFileName = Split-Path $excelFilePath -leaf

# Encode the .xlsx file contents
$excelBin = [IO.File]::ReadAllBytes("$excelFilePath")
$excelEnc = $enc.GetString($excelBin)

# Build the body of the multipart request
$bodyLines = (
  "--$boundary",
  'Content-Disposition: form-data; name="textField"',
  '',
  "$textField",
  "--$boundary",
  "Content-Disposition: form-data; name=`"apiDef`"; filename=`"$apiFileName`"",
  'Content-Type: application/octet-stream',
  $apiDefEnc,
  "--$boundary--",
  "Content-Disposition: form-data; name=`"excelFile`"; filename=`"$excelFileName`"",
  'Content-Type: application/octet-stream',
  $excelFileEnc,
  "--$boundary--"
) -join $LF

# Execute the call
Invoke-WebRequest $url `
  -Verbose `
  -Method Post `
  -TimeoutSec 60 `
  -ContentType "multipart/form-data; boundary=$boundary" `
  -Body $bodylines

Запрос кажется успешным:

Я печатаю req.body и req.files на сервере, чтобы увидеть, что было опубликовано:

{ textField: 'some text here' }
{ apiDef:
   [ { fieldname: 'apiDef',
       originalname: 'api-def.yaml',
       encoding: '7bit',
       mimetype: 'application/octet-stream',
       destination: 'temp',
       filename: 'api-def.yaml',
       path: 'temp\\api-def.yaml',
       size: 2276 } ] }

Итак, файл .yaml успешно опубликован, как и текстовое поле. Однако файл excel не отправляется.

Я попытался изменить тип содержимого и исследовал, есть ли другая кодировка, которую я должен использовать, но безрезультатно.

Это то, что я пытаюсь сделать возможное? Что я делаю не так?

...