PowerShellでファイルをHTTP POSTしたかったので調べてみました。
サーバ側のコードもPHPで作成して、動作確認もしてみます。
環境
クライアント: PowerShell v5.1
サーバ: CentOS7.6+Apache2.4.6+PHP5.4.16
Powershellスクリプト
「192.168.1.1」はWebサーバのIPアドレスです。
########### # パラメータ ########### $uri = "http://192.168.1.1" $filePath = "C:\Users\test\test.txt" ########### # Body ########### $fileName = [System.IO.Path]::GetFileName($filePath) $boundary = '----Boundary' $tempFile = './tempfile' $UTF8woBOM = New-Object "System.Text.UTF8Encoding" -ArgumentList @($false) $sw = New-Object System.IO.StreamWriter($tempFile, $false, $UTF8woBOM) $sw.Write("--$boundary`nContent-Disposition: form-data; name=`"up_file`"; filename=`"$fileName`"`n") $sw.Write("Content-Type: application/octet-stream`n`n") $sw.Close() $fs = New-Object System.IO.FileStream($tempFile, [System.IO.FileMode]::Append) $bw = New-Object System.IO.BinaryWriter($fs) $fileBinary = [System.IO.File]::ReadAllBytes($filePath) $bw.Write($fileBinary) $bw.Close() $sw = New-Object System.IO.StreamWriter($tempFile, $true, $UTF8woBOM) $sw.Write("`n--$boundary--`n") $sw.Close() ########### # Post ########### Invoke-RestMethod -Method POST -Uri $uri -ContentType "multipart/form-data; boundary=$boundary" -InFile $tempFile Remove-Item $tempFile
サーバ側コード(PHP)
動作確認のためのサーバ側のコードとなります。言語はPHPです。
簡易的なアップローダーとなります。
<?php $tempfile = $_FILES['up_file']['tmp_name']; $filename = './up_file/' . $_FILES['up_file']['name']; if (is_uploaded_file($tempfile)) { move_uploaded_file($tempfile, $filename); } ?>
動作確認
「/var/www/html」配下に上記のPHPを「index.php」として配置し、「up_file」フォルダも作成します。
# ls -lR /var/www/html /var/www/html: 合計 4 -rw-r--r-- 1 apache apache 191 11月 7 23:35 index.php drwxr-xr-x. 2 apache apache 22 11月 7 23:38 up_file
クライアント側でPowerShellを実行したところ、ファイル「test.txt」を無事アップロードできました
/var/www/html/up_file: 合計 4 -rw-r--r-- 1 apache apache 30 11月 7 23:38 test.txt # cat /var/www/html/up_file/test.txt テストファイルです。