У меня возникли проблемы с определением, как сохранять видеоданные, отправленные мне через HttpListener в PowerShell. У меня есть следующее, которое, я считаю, просто отправляет его обратно запрашивающему, но у меня проблемы с сохранением его в файле MP4.Сохранение видеоданных в файл из запроса POST InputStream в PowerShell
$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()
Благодарим за ваше время eveyrone!
Update:
Я был в состоянии сделать файлы с этим, хотя по какой-то причине в примерах они используют 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
Это действительно закодированы в UTF8? Я ожидаю, что это будет сырым, поэтому '[Text.Encoding] :: Default' следует использовать. Во всяком случае, в чем проблема? – wOxxOm
Я пытаюсь сохранить его в файл, я обновил сообщение. Однако я получаю файл с нулевой длиной. Насколько я могу судить, я ни о чем не жалуюсь. Я использую инструмент «Почта» Chrome для отправки двоичного кода. Будет ли видеофайл просто загружен как сырьевой? –
В зависимости от того, как работает Postman API, он может быть сырым, поскольку он наиболее эффективен для двоичных данных. Или это может быть JSON-stringified. Однако, судя по сообщениям об ошибках, которые вы добавили, ничего не получено вообще. Попробуйте отладить код по строкам. – wOxxOm