使用 ASP.NET Core 3 流式传输视频

2024-01-04

我目前正在 ASP.NET Core 3 中构建 API,作为我使用 .NET Core 的第一个项目。

我目前正在尝试将视频发送到我的 React.js 前端以在浏览器中观看。上传文件和视频确实可以正常工作,您在下面看到的方法也已经将文件发送到客户端,但如果视频长度超过几秒,则视频播放器非常慢,并且也需要很长时间才能跳过视频的几秒钟。我认为这是因为文件首先被完全下载然后播放。

[Route("getFileById")]
public FileResult getFileById(int fileId)
{

    var context = new DbContext();

    var file = context.File.Find(fileId);

    if (file == null)
    {
        Console.WriteLine("file " + fileId + " not found");
        return null;
    }

    var content  = new FileStream(file.Name, FileMode.Open, FileAccess.Read, FileShare.Read);
    var response = File(content, "application/octet-stream");
    return response;
}

我认为解决我的问题的方法是流式传输文件而不是将其作为一个整体发送。 我已经在 google 上搜索过如何使用 ASP.NET Core 3 流式传输视频,但我只找到了针对 ASP.NET Core 2 进行解释的网站(例如http://anthonygiretti.com/2018/01/16/streaming-video-asynchronously-in-asp-net-core-2-with-web-api/ http://anthonygiretti.com/2018/01/16/streaming-video-asynchronously-in-asp-net-core-2-with-web-api/)

我已经尝试使用这些网站上的代码,但他们的方式与 ASP.NET Core 3 不兼容。

如何在 ASP.NET Core 3 中流式传输文件?


如果您想在浏览器中流式传输视频,您的服务器应该支持HTTP 范围请求 https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests。在这种情况下,服务器只能发送客户端请求的内容的一小部分。当您想在浏览器中流式传输视频时,您可以使用video使用范围标头请求内容的 html 标签。因此,您也可以跳过一些时间,在电影完全下载之前立即从该位置播放电影。

ASP.NET Core 3已经支持HTTP范围请求,它的实现是PhysicalFile具有属性的方法启用范围处理。正如文档所说:

返回由physicalPath(Status200OK)指定的文件, 指定 contentType 作为 Content-Type,并且指定 fileDownloadName 作为建议的文件名。这支持范围 请求(Status206PartialContent 或 Status416RangeNotSatisfiable,如果 范围不能满足)。

[Route("getFileById")]
public FileResult getFileById(int fileId)
{
    ...
    return PhysicalFile($"C:/movies/{file.Name}", "application/octet-stream", enableRangeProcessing: true);
}

请注意,路径必须是绝对路径(而不是相对路径)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ASP.NET Core 3 流式传输视频 的相关文章

  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • ASP.NET MVC,控制器可以改变提交的值吗?

    ASP NET MVC 中是否允许更改提交的值 HttpPost public ActionResult Create Person toCreate toCreate Lastname toCreate Lastname A return
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • jQuery 在 jsFiddle 中可以运行,但在我的电脑上不行

    我是 jQuery 的新手 一整天都在绞尽脑汁试图确定为什么这个脚本在 jsFiddle 中运行而不是在我的计算机上运行 我没有服务器设置 我只是从桌面在浏览器中启动 html 代码在这里工作正常 http jsfiddle net 9Du
  • Julia 语言 - @async 任务中的状态 :: 当前目录

    我注意到 阅读 捕获了生产错误 Julia 中的不同任务 没有自己的工作目录 但当前目录 是共享的 我意识到在操作系统级别这是显而易见的 一个进程有一个工作目录 我的问题是第一 是否有任何其他明显或不太明显的全局状态我应该注意 显然是环境变
  • Box.COM 与 Android 应用程序集成-OAuthActivity-NullpointerException?

    我正在整合BOX COM与我的 android 应用程序 所以我正在使用BoxAndroidLibraryV2 and BoxJavaLibraryV2与我的申请 我可以运行示例 Android 应用程序BoxSDKSample 因此 我从
  • 使用 R 中的 fct_reorder 根据值重新排序因子

    My data structure list LoB c C C C A A B C A A C A B C B A C B A B C A B B A B C A B C B word c speed connection call bt
  • 如何使用 ansible 'expect' 模块来处理多个不同的响应?

    在这里 我尝试测试我的 bash 脚本 它提示了四次 bin bash date gt opt prompt txt read p enter one one echo one echo one gt gt opt prompt txt r
  • 如何在perl中删除文件的最后10行

    我将总行数作为用户输入 然后从文件中删除这些行数 我看到了这个 learn perl org faq perlfaq5 html How do I count the number of lines in a file 然后我厌倦了下面的简
  • 堆转储中不可能的 Java 内存引用

    我有一个在晚上 7 41 拍摄的 Java 堆转储 我正在使用 Eclipse 内存分析工具对其进行分析 堆转储包含 20 个会话对象 对堆中的这些会话对象之一使用 GC 根路径 命令会显示以下 3 个对该会话对象的引用 来自终结器线程拥有
  • 找不到netbeans 8.0.2中maven本地存储库路径的设置位置

    在 netbeans 中 当我转到 工具 gt 选项 gt Java gt Maven 面板时 显示 Maven 主页 捆绑Maven主页 https i stack imgur com 8yQIQ png 但是我在Netbeans 8 0
  • Heroku、Grails:如果使用多个 Web dyno,则会缺少资源

    我已经创建了 grails 应用程序并将其上传到 heroku 中 如果我使用 heroku 规模网络 1 一切看起来都不错 但如果我跑 heroku 规模网络 2 一些静态资源消失了 从日志中我可以看出 web 2 dyno 中的所有静态
  • 阴影位于文本上方

    我正在向 Xamarin UWP 项目添加阴影 但问题并不是真正特定于 Xamarin 而是一般来说是 UWP bool IsShadowSupported gt ApiInformation IsApiContractPresent Wi
  • 无法使用带有 connect 的 ref 调用子方法

    我想从子组件调用一个方法 按照这里的建议从父方法调用子方法 https stackoverflow com questions 37949981 call child method from parent 但是 当子组件使用来自react
  • 在 while 循环中延迟

    所以我想在 jquery 中执行延迟的 ajax 请求 直到收到特定的服务器响应 非空 我该怎么做呢 while data response null ajax done function data function doUntilResu
  • Python将列表分成n块

    我知道这个问题已经被讨论过很多次了 但我的要求不同 我有一个类似的列表 range 1 26 我想把这个列表分成固定数量n 假设 n 6 gt gt gt x 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1
  • 联合和结构初始化

    我偶然发现了一段基于 C 语言联合的代码 代码如下 union struct char ax 2 char ab 2 s struct int a int b st u 12 1 printf d d u st a u st b 我只是不明
  • 以最少的比较次数对数组进行排序

    我的计算机科学作业需要一些帮助 我需要编写一个排序例程 在最坏的情况下使用 7 次比较对长度为 5 的数组进行排序 我已经证明 由于决策树的高度 将需要 7 次比较 我考虑使用决策树 硬编码 但这意味着该算法非常复杂 并且我的导师暗示这不是
  • GWT MVP架构优势

    我正在学习 GWT 并且在多个地方读到 使用 MVP 架构最适合开发 GWT 应用程序 我还读到 使用 MVP ARCH 进行测试很容易 有人可以解释一下为什么使用 MVP 架构进行测试很容易 另外 我正在使用 MVP 开发一个项目 我发现
  • for 循环的简洁数学符号

    如果这不属于这里 我很抱歉 但我正在寻找一种方法来描述我的代码的数学背景 使用 numpy 我对两个以上的维数组求和 a shape 10 5 2 b shape 5 2 c a b c shape 10 5 2 是否有一个纯粹的数学符号
  • 如何将多个 actor 作为源附加到 Akka 流?

    我正在尝试构建并运行一个 akka 流 在 Java DSL 中 其中 2 个 actor 作为源 然后是一个合并结点 然后是 1 个接收器 Source
  • 在 Flutter 的 in_app_purchase 插件中使用 sandbox = true 调用 buyNonConsumable 方法,并在调用 queryPastPurchases 时获取 sandbox = false

    我正在测试 Flutter 的 in app purchase 插件 https github com flutter plugins tree master packages in app purchase https github co
  • 使用 ASP.NET Core 3 流式传输视频

    我目前正在 ASP NET Core 3 中构建 API 作为我使用 NET Core 的第一个项目 我目前正在尝试将视频发送到我的 React js 前端以在浏览器中观看 上传文件和视频确实可以正常工作 您在下面看到的方法也已经将文件发送