【发布时间】:2018-08-29 19:39:49
【问题描述】:
我正在尝试通过 ASP.NET MVC 5 Action 将视频流式传输到 WebBrowser,该视频作为附件保存在 Ravendb 数据库中。它正在使用以下代码,但视频在视频开始之前已完全下载。我不明白我做错了什么。
我找到了一些在 MVC 中进行流式处理的方法,但他们似乎期望一个可搜索的流 - 但我从 Ravendb 收到的流是不可搜索的;它甚至没有提供长度。因此,这样做的唯一方法是将 ravendb-stream 复制到 memorystream 并从那里提供 PartialContent 或类似内容。
有人有更好的解决方案吗?我不可能是唯一一个想要从数据库中流式传输视频而不在发送之前将完整视频加载到内存中的人。
我正在像这样从 ravendb 获取附件:
public async Task<System.IO.Stream> GetAttachmentAsync(IAttachmentPossible attachedObject, string key)
{
using (var ds = InitDatabase())
{
using (var session = ds.OpenAsyncSession())
{
try
{
var result = await session.Advanced.Attachments.GetAsync(attachedObject.Id, key);
return result.Stream;
}
catch (Exception ex)
{
return null;
}
}
}
}
之后我像这样将流发送到浏览器:
var file = await _database.GetAttachmentAsync(entry, attachmentId);
HttpResponseMessage msg = new HttpResponseMessage(HttpStatusCode.OK);
msg.Content = new StreamContent(file);
msg.Content.Headers.ContentType = new MediaTypeHeaderValue("video/mp4");
return msg;
有什么想法吗?非常感谢!
【问题讨论】:
-
如果我的 ravendb-stream 是可搜索的,这是一个对我有帮助的答案:stackoverflow.com/a/39247028/10291808
标签: c# asp.net-mvc ravendb