zoukankan      html  css  js  c++  java
  • 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();
                    }
                });
  • 相关阅读:
    iOS URL中汉字的编码和解码
    指针函数和函数指针
    面试题1:赋值运算符函数
    线程安全的单实例模式
    大数相加
    网格走法
    stringstream字符串流的妙用
    判断一棵二叉树是否为二叉排序树
    idea 从javadoc中复制内容出来
    idea开启jquery提示及如何找到学习目标
  • 原文地址:https://www.cnblogs.com/juanheqiao/p/14204739.html
Copyright © 2011-2022 走看看