从 POST 请求 PowerShell 中的 InputStream 将视频数据保存到文件

Saving Video Data To File From POST request InputStream in PowerShell

我很难弄清楚如何在 PowerShell 中保存通过 HttpListener 发送给我的视频数据。我有以下内容,我认为只是将其发送回请求者,但我无法将其保存到 MP4 文件中。

    $req = $request
    $body = $req.InputStream
    $reader = New-Object System.IO.StreamReader ($body, $req.ContentEncoding)
    $msg = $reader.ReadToEnd()
    $reader.Close()

    [byte[]] $buffer = [System.Text.Encoding]::UTF8.GetBytes($msg)
    $res.ContentLength64 = $buffer.Length
    $res.StatusCode = 200
    $res.OutputStream.Write($buffer, 0, $buffer.Length)
    $res.Close()

谢谢大家的抽空!

更新:

我已经能够用它来制作文件,尽管出于某种原因,在示例中他们使用了 8192 大小的字节,但 PowerShell 说它太大了。有了这个,我得到了零长度的文件,没有我能分辨的错误。

    $path = "c:\matthew3.mp4"
    $file = New-Object System.IO.FileStream $path,CreateNew

    [byte]$bytes = 255

    [int]$bytes_read = 0

    while ( $bytes_read = $request.InputStream.Read($bytes, 0, $bytes.length) > 0 ) 

    {

        $file.Write($bytes, 0, $bytes_read)

    }

实际上我确实遇到了一个错误:

Exception calling "GetBytes" with "1" argument(s): "Array cannot be null.
Parameter name: chars"
At line:45 char:1
+ $buffer = [System.Text.Encoding]::UTF8.GetBytes($content)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentNullException

Exception calling "Write" with "3" argument(s): "Value cannot be null.
Parameter name: buffer"
At line:47 char:1
+ $response.OutputStream.Write($buffer, 0, $buffer.Length)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentNullException

我们公司的主要开发人员 Nick 在这里为我指明了正确的方向。

主要是我需要为 FileStream 对象添加 Write 标志,并在 InputStream 上使用 CopyTo 方法,然后关闭它们:

        $file = New-Object System.IO.FileStream $path,CreateNew,Write

        $context.Request.InputStream.CopyTo($file)

        $file.Close()

        $context.Request.InputStream.Close()