前情提要

https://www.cnblogs.com/puzhiwei/p/15265005.html

在解决.Net5 如何修改Content-Disposition实现在线预览的功能后,我又遇到了新的问题,那就是在预览视频文件时无法拖动进度条。我尝试了多种解决方案都没有解决这个问题,首先我先对这个问题进行了一番搜索,但是并没有发现什么解决方法。但是在Google时,我发现这个问题是一个分段下载的问题。于是我就搜索了.Net5分段下载。

果然,我找到了一些.Net5分段下载的文章。

像这个 https://www.cnblogs.com/xxred/p/7931757.html

以及这个 https://www.cnblogs.com/tianma3798/p/13445111.html

但是都不太好用。

于是我就开始了继续搜索。

wwwroot下文件的加载

我尝试将视频文件放到.Net默认的静态文件加载目录wwwroot下,然后直接访问wwwroot里的视频文件,我发现这个是可以拖动的,并且响应头与请求头中多出了Content-Range这个信息。

MDN 上说 在HTTP协议中,响应首部 Content-Range 显示的是一个数据片段在整个文件中的位置。

那么问题就很清楚了,就是如何实现在视频传输时添加Content-Range的问题,于是我又开始了搜索 .net5 file Content-Range,别说,还真找到了一些方案

这个

https://www.codeproject.com/Articles/820146/HTTP-Partial-Content-In-ASP-NET-Web-API-Video

还有这个

https://www.c-sharpcorner.com/UploadFile/vendettamit/handling-range-specific-content-request-in-webapi-Asp-Net/

过于复杂且不知道好不好用,然后我就接着搜。

Github 的结果

于是我就在Github上找到了这个https://github.com/aspnet/Mvc/pull/6895

看了看好像就是说 return File() 时如何实现分段传输文件的方法的。

看了看使用方法好像还是不太会用,不过不重要,我已经知道该搜索什么了。

enableRangeProcessing

接着搜 enableRangeProcessing 我就发现了这篇文章 https://www.cnblogs.com/tianma3798/p/13445147.html ,其中提到了enableRangeProcessing 直接设置 true 即可启用对按范围返回文件流的支持,至此问题解决。

最新代码

        [Route("load")]
[HttpGet]
public async Task<IActionResult> DownloadFile(string path, string type)
{
if (string.IsNullOrEmpty(path))
{
return Content("404 for not found!");
} try
{
// 获取文件的ContentType
string fileExt = Path.GetExtension(path);
var provider = new FileExtensionContentTypeProvider();
var memi = provider.Mappings[fileExt];
if (type == "inline")
{
Response.Headers.Add("Content-Disposition", $"inline; filename={System.Net.WebUtility.UrlEncode(Path.GetFileName(filePath))}");
return PhysicalFile(filePath, memi, true);
//return File(memoryStream, memi, true);
}
return PhysicalFile(filePath, memi, Path.GetFileName(filePath), true);
}
catch (DirectoryNotFoundException e)
{
_logger.LogError($"文件:{path},没有找到!\n{e.Message}");
return Content("404 for not found!");
}
}

总结

通过这次问题的解决,告诉我一个道理,要是一个问题一开始搜索没有什么解决方案,说不定看一下源码才是问题最好的解决方案。就能看到enableRangeProcessing这个参数,快速的去解决这个问题。

       //
// 摘要:
// Returns the file specified by physicalPath (Microsoft.AspNetCore.Http.StatusCodes.Status200OK)
// with the specified contentType as the Content-Type. This supports range requests
// (Microsoft.AspNetCore.Http.StatusCodes.Status206PartialContent or Microsoft.AspNetCore.Http.StatusCodes.Status416RangeNotSatisfiable
// if the range is not satisfiable).
//
// 参数:
// physicalPath:
// The path to the file. The path must be an absolute path.
//
// contentType:
// The Content-Type of the file.
//
// enableRangeProcessing:
// Set to true to enable range requests processing.
//
// 返回结果:
// The created Microsoft.AspNetCore.Mvc.PhysicalFileResult for the response.

版权信息

本文首发于 https://www.buguagaoshu.com/archives/aspnet5传输视频文件无法快进

解决 Asp.Net5 在视频文件下载预览时无法快进的问题的更多相关文章

  1. 停止预览时调用Camera.release(), 出现Method called after release()异常问题原因及解决办法

    如下代码: private void stopPreview() { Log.w(TAG, "stopPreview(), _isPreviewing = " + _isPrevi ...

  2. 解决在IE里预览时弹出:为了有利于保护安全性......

    用Dreamweaver做网页,在IE里预览时弹出这个:为了有利于保护安全性,Internet Explorer 已限制此网页运行可以访问计算机的脚本或ActiveX控件. 在页面顶部加段代码就可以了 ...

  3. 在TVideoGrabber中如何在预览时设置相机属性

    在使用TVideoGrabber进行预览时,如何设置相机的属性呢?比如曝光.对比度.亮度等. 下面来看一下,如何通过编程来调整这些设置: ——通过指定VideoDevice属性(在VideoDevic ...

  4. RDLC 图形报表预览时 “本地报表处理期间错误”

    在RDLC报表中有图形报表的导出和打印都正常,但预览时"本地报表处理期间错误",这是因为你设置的图形太宽已经超过默认的A4 纸的宽度,解决办法:报表页面的报表--->报表属性 ...

  5. nginx,文件下载,预览,防止浏览器下载时直接打开,防止预览时直接下载文件,解决nginx谷歌浏览器不支持下载问题

    公司项目逐渐增多,对效率的要求越来越高,不同项目分部不同服务器,最初想用nginx 就是为了多个项目用一个url和服务器宕机解决方案 nginx也可作为附件服务器,毕竟nginx也对静态文件支持较好, ...

  6. 百度编辑器上传视频以及视频编辑器预览bug解决

    百度编辑器目前来讲是运用比较广泛的一个编辑器了,不仅开源还有中文的文档,所以很受欢迎,不过里面也有许多地方需要开发人员自己调试,其中一个比较常见的问题就是上传视频了,上传视频本身有一些小bug,这个基 ...

  7. ASP.NET MVC 项目直接预览PDF文件

    背景及需求 项目使用的是MVC4框架,其中有一个功能是根据设置生成PDF文件,并在点击时直接预览. 实现过程 1.第一版实现代码: HTML内容 @{ Layout = null; } <!DO ...

  8. ASP.NET Core 3.0预览版体验

    目前.NET Core 3.0的版本为.NET Core 3.0 Preview 3,对应ASP.NET Core 3.0 Preview 3. ASP.NET Core 3.0 之后将不再支持.NE ...

  9. 微信小程序上传图片,视频及预览

    wxml <!-- 图片预览 --> <view class='preview-warp' wx:if="{{urls}}"> <image src= ...

随机推荐

  1. Springboot中配置druid

    pom文件信息: <!--引入druid数据源--> <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> ...

  2. 关于Eclipse中使用Maven进行Install安装时候报错Perhaps you are running on a JRE rather than a JDK?解决办法

    所遇到的问题: 详情报错: 英文描述: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3. ...

  3. Java随手记录

    Spring @Configuration注解及配置方法 转自:https://www.jb51.net/article/184822.htm Spring @Configuration注解 Spri ...

  4. 我对数据库关系代数中减法sql实现的思考:mysql脚本

    一.创建数据库,创建表结构 CREATE DATABASE Test_sub DEFAULT CHARACTER SET utf8; USE Test_sub; CREATE TABLE studen ...

  5. 聊聊 PC 端自动化最佳方案 - Pywinauto

    1. 前言 大家好,我是安果! 上一篇文章,聊到 PC 端的一种自动化方案:WinAppDriver 聊聊 PC 端自动化最佳方案 - WinAppDriver 有小伙伴后台给我留言,说「 pywin ...

  6. 改变this指向&闭包特性

    Q:为什么用普通函数时,setTimeout里面的this指向的是window? //通过保留this的方式,通过闭包的特性去拿this let _this = this //...ajax setT ...

  7. [源码解析] 深度学习流水线并行 PipeDream(2)--- 计算分区

    [源码解析] 深度学习流水线并行 PipeDream(2)--- 计算分区 目录 [源码解析] 深度学习流水线并行 PipeDream(2)--- 计算分区 0x00 摘要 0x01 前言 1.1 P ...

  8. leetcode——217. 存在重复元素

    leetcode--217. 存在重复元素 题目描述:给定一个整数数组,判断是否存在重复元素. 如果存在一值在数组中出现至少两次,函数返回 true .如果数组中每个元素都不相同,则返回 false ...

  9. 利用 Spring Boot 中的 @ConfigurationProperties,优雅绑定配置参数

    使用 @Value("${property}") 注释注入配置属性有时会很麻烦,尤其是当你使用多个属性或你的数据是分层的时候. Spring Boot 引入了一个可替换的方案 -- ...

  10. C# 给PPT中的图表添加趋势线

    本文内容分享通过C#程序代码给PPT文档中的图表添加数据趋势线的方法. 支持趋势线的图表类型包括二维面积图.条形图.柱形图.柱形图.股价图.xy (散点图) 和气泡图中:不能向三维.堆积.雷达图.饼图 ...