AspNetCore 的Controller基本设置

日志注入

public class DemoController : BaseController
{
    private readonly ILogger<DemoController> _logger;

    public DemoController(ILogger<DemoController> logger)
    {
        _logger = logger;
    }
    [HttpGet]
    public string GetMethod()
    {
        _logger.LogInformation("TODO.......");
    }
}

缓冲区中的文件流发给客户端

using Microsoft.AspNetCore.Mvc;
using System.IO;
using System.Web;
[Route("api/MyApi/[controller]/[action]")]
[ApiController]
[ApiExplorerSettings(IgnoreApi = false)]
public class BaseController : ControllerBase
{
    /// <summary>
    /// 缓冲区中的文件流发给客户端
    /// </summary>
    /// <param name="stream">二进制文件流</param>
    /// <param name="fileName">文件名称</param>
    /// <param name="length">文件长度</param>
    /// <param name="contentType">文件的内容类型</param>
    /// <returns></returns>
    protected IActionResult DownloadFile(Stream stream, string fileName, long length, string contentType = "application/octet-stream")
    {
        Response.ContentType = contentType;
        Response.Headers.Add("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
        Response.Headers.Add("Content-Length", length.ToString());
        Response.Headers.Add("Access-Control-Allow-Origin", "*");
        Response.Headers.Add("Access-Control-Allow-Credentials", "true");

        int bufferSize = FileHelper.CACHESIZE;
        using (stream)
        {
            using (Response.Body)
            {
                long hasRead = 0;
                int curRead = 0;
                var buffer = new byte[bufferSize];
                while ((curRead = stream.Read(buffer, 0, bufferSize)) != 0) // 读取内容到服务器内存中
                {
                    if (HttpContext.RequestAborted.IsCancellationRequested)
                    {
                        // 如果客户端中断了服务器的连接,取消下载文件的读取和发送
                        break;
                    }
                    Response.Body.Write(buffer, 0, curRead);
                    Response.Body.Flush();  // 释放服务器内存空间
                    hasRead += curRead;     // 更新已经发送到客户端浏览器的字节数
                    //Console.WriteLine($"{DateTime.Now} {fileName} 数据流分段写 {length}/{hasRead}");
                }
            }
        }

        return new EmptyResult();
    }
}
posted @ 2021-06-04 17:07  wesson2019  阅读(286)  评论(0编辑  收藏  举报