如何从 ASP Net Core 6 Minimal API 提供视频文件/流
How to serve video file / stream from ASP Net Core 6 Minimal API
我尝试按照不同的教程实现此目的,但没有成功。我如何处理最小 API 的 http 范围请求以提供视频流?
我有这个用于 API 的最小设置代码,其中映射了一个 GET 路径“/video”。我还在项目文件夹中创建了一个文件夹“wwwroot”。我在那里放置了一个名为“test.mp4”的 mp4 视频文件。有知识的人可以写一个简单的例子来说明如何在我的映射路由中传输这个文件吗?
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
builder.Logging.AddJsonConsole();
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapGet("/video", () =>
{
});
您可以使用 Results.Stream()
方法 return 来自最小 api 的流。
string wwwroot = builder.Environment.WebRootPath;
...
app.MapGet("/video", () =>
{
string filePath = Path.Combine(wwwroot, "test.mp4");
return Results.Stream(new FileStream(filePath, FileMode.Open));
});
The stream parameter is disposed after the response is sent.
Results.Stream
接受一些可能对您有用的其他可选参数,例如 fileDownloadName
和 contentType
(默认为 "application/octet-stream"
)。设置 enableRangeProcessing: true
以启用 range requests.
如果您愿意,上面的内容可以很容易地改编为将 filename
作为参数。您需要考虑验证(同样适用于当前代码 TBH)。经过测试并为我工作。
我尝试按照不同的教程实现此目的,但没有成功。我如何处理最小 API 的 http 范围请求以提供视频流?
我有这个用于 API 的最小设置代码,其中映射了一个 GET 路径“/video”。我还在项目文件夹中创建了一个文件夹“wwwroot”。我在那里放置了一个名为“test.mp4”的 mp4 视频文件。有知识的人可以写一个简单的例子来说明如何在我的映射路由中传输这个文件吗?
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
builder.Logging.AddJsonConsole();
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapGet("/video", () =>
{
});
您可以使用 Results.Stream()
方法 return 来自最小 api 的流。
string wwwroot = builder.Environment.WebRootPath;
...
app.MapGet("/video", () =>
{
string filePath = Path.Combine(wwwroot, "test.mp4");
return Results.Stream(new FileStream(filePath, FileMode.Open));
});
The stream parameter is disposed after the response is sent.
Results.Stream
接受一些可能对您有用的其他可选参数,例如 fileDownloadName
和 contentType
(默认为 "application/octet-stream"
)。设置 enableRangeProcessing: true
以启用 range requests.
如果您愿意,上面的内容可以很容易地改编为将 filename
作为参数。您需要考虑验证(同样适用于当前代码 TBH)。经过测试并为我工作。