6.26RateLimitedStream 与 FileTypeMapper
在 SaaS/PaaS 应用平台中,用户常根据资源使用量(如带宽和流量)付费。特别是在用户下载或上传资源时,平台会进行速率限制。此时,框架提供的 RateLimitedStream 流非常有用。该流能够根据设定的速率限制调整读写速度,非常适合用于资源控制。
RateLimitedStream 带速率限制的流#
在 SaaS/PaaS 应用平台中,用户常根据资源使用量(如带宽和流量)付费。特别是在用户下载或上传资源时,平台会进行速率限制。此时,框架提供的 RateLimitedStream 流非常有用。该流能够根据设定的速率限制调整读写速度,非常适合用于资源控制。
使用 RateLimitedStream 非常简单,只需通过构造函数传入需速率控制的 Stream 对象及每秒允许的最大字节数 bytesPerSecond。例如:
var stream = await httpRemoteService.GetAsStreamAsync("https://furion.net/", HttpCompletionOption.ResponseHeadersRead);// 使用 RateLimitedStream 包装流并返回新的流,后续操作使用 rateLimitedStream 代替 stream 即可var rateLimitedStream = new RateLimitedStream(stream, 1024 * 1024 * 1); // 限制最大读写速率为 1MB/s// 此时对 rateLimitedStream 的读写操作将被控制在 1MB/s 以内。✅总的来说,RateLimitedStream 是一个强大的流包装器,能够帮助开发者在 SaaS/PaaS 平台上更好地管理资源使用,确保用户操作符合付费条件,同时提升系统稳定性和性能。
FileTypeMapper 文件 MIME 类型映射#
在文件上传和下载过程中,通常需要依据文件扩展名来获取或设置其 MIME 类型。这一步骤往往要求开发者手动进行正确设置。为了减轻开发者负担,框架提供了 FileTypeMapper 类型,它能够根据文件扩展名自动返回对应的 MIME 类型。例如:
var fileTypeMapper = new FileTypeMapper();fileTypeMapper.TryGetContentType("image.jpg", out var mimeType); // mimeType 为 "image/jpeg"fileTypeMapper.TryGetContentType("image.png", out mimeType); // mimeType 为 "image/png"框架内置了一个包含 389 种文件扩展名及其对应 MIME 类型的字典,几乎覆盖了所有主流和非主流的文件类型。
此外,框架提供的所有添加文件内容的方法(如 AddFile、AddFileAsStream、AddFileAsByteArray、AddFileFromRemote 等)在用户未指定 contentType 参数时,会自动解析文件的 MIME 类型。若无法解析,则默认设置为 application/octet-stream。例如:
var content = await httpRemoteService.PostAsStringAsync("https://localhost:7044/HttpRemote/AddForm?id=1", builder => builder.SetMultipartContent(multipart => { // 不传递 contentType,自动解析为 "image/jpeg" multipart.AddFileAsStream(@"C:\Workspaces\httptest.jpg", "file") }));借助框架的自动解析功能,开发者在上传文件时无需再手动查找文件的 MIME 类型,从而大大简化了操作流程。