gpt4 book ai didi

c# - WCF 服务 - 支持范围为 : bytes support? 的流式文件

转载 作者:太空狗 更新时间:2023-10-29 23:41:41 25 4
gpt4 key购买 nike

我有一个可以通过 WebGet 返回流的 WCF 服务。到目前为止,这工作正常。但我想要实现的是对 Range header 的支持,以便只返回文件的一部分。到目前为止,这是我的代码:

public System.IO.Stream GetStream(string mElementID)
{
// build the filePath
FileInfo file = GetFile(mElementID);
try
{
FileStream videoStream = File.OpenRead(file.FullName);

if (request.Headers.AllKeys.Contains("Range"))
{
long startRange = ...; // get the start range from the header
long endRange = ...; // get the end range from the header
videoStream.Position = startRange;
// how can I set the end of the range?
//TODO: Don't forget to add the Content-Range header to the response!
}

WebOperationContext.Current.OutgoingResponse.ContentType = GetMimeType(file);
WebOperationContext.Current.OutgoingResponse.Headers.Add("Accept-Ranges", "bytes");
return videoStream;
}
catch (FileNotFoundException){}
catch (IOException ex)
{
throw ex;
}
// throw a 404
throw new WebFaultException(System.Net.HttpStatusCode.NotFound);
}

我只是创建一个 FileStream,然后返回它。现在我想知道获取该 Stream 范围的最佳方法是什么。

我想我可以将 videoStream.Position 设置为 Range 的起始值,但是从文件中的某处 获取部分的最佳方法是什么在文件中?

我是否必须创建一个 MemoryStream 并将相关字节写入其中?此处流式传输的文件是视频文件,因此可能非常大。

最佳答案

你可以按照你自己的建议去做。使用文件流,将位置设置为范围的开头。创建一个设置为所需范围长度的字节数组。然后做

videoStream.Read(myByteArray, 0, myByteArray.Length)

或者,您可以将位置设置为文件流的开头,并在调用 read 时使用第二个参数将自己从文件流的开头偏移。

一旦读入缓冲区(字节数组),就可以将其放入新的内存流(它有一个接受字节数组的重载构造函数)。然后您可以返回派生的 memoryStream。

关于c# - WCF 服务 - 支持范围为 : bytes support? 的流式文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5911186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com