从 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()
我很难弄清楚如何在 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()