• netcore 使用中间件响应文件下载请求


    添加以下中间件即可

    app.Use(async (context, next) =>
                {
                    var token = context.RequestAborted;
                    var response = context.Response;
    
                    IFileProvider fileProvider = new PhysicalFileProvider(@"E:"); // 文件所在根目录
                    IFileInfo file = fileProvider.GetFileInfo(@"神话26.mp4"); // 文件相对根目录所在地址
                    if (!file.Exists)
                    {
                        await next();
                        return;
                    }
    
                    var suffix = ".mp4";
                    var provider = new FileExtensionContentTypeProvider();
                    var memi = provider.Mappings[suffix];
                    response.ContentType = memi;
                    response.Headers.Add(" Content-Disposition ", " attachment;filename= " + "神话26.mp4");
                    response.ContentLength = file.Length;
    
                    // 提供文件地址即可发送文件
                    //await response.SendFileAsync(@"E:神话26.mp4", token); 
                    // 提供文件信息即可发送文件
                    //await response.SendFileAsync(file,  token);
    
                    // 基于body发送文件,好处是可以控制下载速度
                    var fs = file.CreateReadStream();
                    using (System.IO.BinaryReader br = new System.IO.BinaryReader(fs))
                    {
                        await response.Body.FlushAsync();
                        var kbs = 1024f * 2 / 10;
                        while (fs.Position < fs.Length)
                        {
                            if (token.IsCancellationRequested) break;
                            byte[] bytes = br.ReadBytes((int)Math.Truncate(1024 * kbs));
                            await response.Body.WriteAsync(bytes, 0, bytes.Length);
                            await response.Body.FlushAsync();
                            System.Threading.Thread.Sleep(100);
                        }
                        await response.Body.FlushAsync();
                    }
                });
  • 相关阅读:
    Mysql数据优化--DBA梳理珍藏篇
    Spring缓存注解@Cacheable
    Spring常用知识点
    谈一谈对MySQL InnoDB的认识及数据库事物处理的隔离级别
    MySQL主从复制的实现过程
    List 与 数组 互转
    位运算实现小正整数乘法
    最大的K个数
    Java 编码与字符(2)
    JSP工作原理
  • 原文地址:https://www.cnblogs.com/juanheqiao/p/14204739.html
Copyright © 2020-2023  润新知