powershell实现http上传文件

发布时间 2023-05-04 18:32:02作者: Justubborn

服务端代码

# 监听 IP 地址和端口
$ip = "127.0.0.1"
$port = 8080

# 设置上传目录
$uploadDir = "D:\uploads"

# 创建 HttpListener 对象并启动监听
$listener = New-Object System.Net.HttpListener
$listener.Prefixes.Add("http://$ip`:$port/")
$listener.Start()

Write-Host "Listening on http://$ip`:$port/"

# 循环处理客户端请求
while ($listener.IsListening) {
    $context = $listener.GetContext()
    
    # 处理 POST 请求
    if ($context.Request.HttpMethod -eq "POST") {
        $filename = $context.Request.Headers["X-FileName"]
        $filepath = Join-Path $uploadDir $filename
        $length = $context.Request.ContentLength64
        $content = New-Object byte[] $length
        $index = 0
        while($index -lt $length) {
          $read = $context.Request.InputStream.Read($content, 0, $content.Length)
          if($read -eq 0) {
            break
          }
          $index +=$read
        }
        
        # 写入文件
        [System.IO.File]::WriteAllBytes($filepath, $content)
        
        # 返回上传结果
        $response = $context.Response
        $response.StatusCode = 200
        $response.StatusDescription = "OK"
        $response.Close()
        $listener.Stop()
    } else {
        $response = $context.Response
        $response.StatusCode = 404
        $response.StatusDescription = "not found"
        $response.Close()
        $listener.Stop()
    }
}


客户端代码

# 发送 POST 请求上传二进制文件
$uri = "http://127.0.0.1:8080"
$filePath = "D:\1.txt"

Invoke-WebRequest -Uri $uri -Method POST -Headers @{"X-FileName" = "1.txt"} -InFile $filePath

pause