我正在使用Nancy(版本1.4.4)基于REST架构在.NET上编写自托管服务器。我更喜欢自我托管(Nancy.Hosting.Self是版本1.4.1),其中一个要求功能是响应视频文件的请求。为了使图片清晰,我的合作伙伴编写了React应用程序,他需要这个视频。
我尝试过不同的选择:
首先我尝试了Response.AsFile()
但是当我尝试通过链接访问它时,我得到404带标签"找不到您请求的资源。"我不明白为什么......
public class HelloModule : NancyModule
{
public HelloModule()
{
Get["/"] = parameters =>
{
return Response.AsFile(@"C:\7\video112018.mp4","video/mp4");
};
}
}
第二种变体是在下面的代码中使用GenericFileResponce
,但它会导致同样的问题:
public class HelloModule : NancyModule
{
public HelloModule()
{
Get["/"] = parameters =>
{
GenericFileResponse fileResponse = new GenericFileResponse(@"C:\7\video112018.mp4");
return fileResponse;
};
}
}
我尝试的最后一个选项是直接写入响应流,如下面的代码所示,但在这种情况下出现错误"指定的网络名称不再可用"发生。让它变得棘手的是这个错误有时会发生,但我没有找到任何来自它的依赖...
public class HelloModule : NancyModule
{
public HelloModule()
{
Get["/"] = parameters =>
{
return new Response
{
ContentType = "video/mp4",
Contents = s =>
{
String fileName = @"C:\7\video112018.mp4";
using (var stream = new FileStream(fileName, FileMode.Open))
stream.CopyTo(s);
s.Flush();
s.Close();
}
};
};
}
}
如果您对这些解决方案有任何建议或给另一个解决方案,我将非常感激。
P上。 S.我也尝试发送图像,它适用于第三种方法但不适用于第一种或第二种
P.P。 S.不要严格判断代码,因为它只是一个例子)
答案 0 :(得分:1)
通过执行以下操作,我可以进行非常基本的视频文件流传输:
Get["/"] = p =>
{
var file = new FileStream(@"PATH_TO_FILE", FileMode.Open);
return new StreamResponse(() => file, "video/mp4");
}
这允许播放视频文件,但没有进行搜索。
最后我找到了this个帖子。添加这些扩展名可以搜索视频。