• asp.net coree文件上传与下载实例


    asp.net core像springboot非常相似,我们从一个springboot文件上传与下载的例子来引到asp.net core的文件上传与下载:

    本文asp.net core版本为:6.0

    1 springboot中文件上传与下载的方式

    1.1 上传

    在controller中接收MultipartFile即可。
    前端需要使用form-data传参,方式如下:
    在这里插入图片描述

    2.2 下载

    参考这篇文章:
    spring controller实现下载文件的两种方式

    2 使用asp.net core进行文件上传与下载

    还是那句话,官网虽然已经很详细了,但是看起来还是很抽象、晦涩。

    下面通过几个例子来完成文件的上传与下载。

    2.1 文件的上传

    1、首先创建一个controller
    在asp.net core的api服务中,我们需要继承自ControllerBase类。

    [Route("[controller]/[action]")]的意思是,比如我们有一个方法uploadFile(),那么当前接参的url就是:ip:port/File/uploadFile

    [Route("[controller]/[action]")]
    [ApiController]
    public class FileController : ControllerBase{
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、然后我们创建一个接参的类
    注意:这里的IFormFile对标springboot中的MultipartFile,都可以直接接收文件。
    具体的属性与方法可以参考微软官网。

    public class FileParam
    {
        //文件id
        public long? fileId { get; set; }
        
        // 文件
        public IFormFile? file{ get; set;}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3、开始编写具体的前端控制器
    注意,我们需要在入参上添加[FromForm],否则我们接收不到前端传过来的数据。

    当我们加了[FromForm]后,asp.net core会将接收过来的参数自动封装为FileParam

    [Route("[controller]/[action]")]
    [ApiController]
    public class FileController : ControllerBase{
    
    	[HttpPost]
        public ResultVo<bool> uploadFile([FromForm] FileParam fileParam)
        {
            // 文件上传
            string? fileName = fileParam.file?.FileName;
            // 获取程序所在目录
            string baseDir = System.AppDomain.CurrentDomain.BaseDirectory + "/upload/";
            string filePath = baseDir + fileName;
            // 如果目录不存在,则创建
            if (!System.IO.Directory.Exists(baseDir)) System.IO.Directory.CreateDirectory(baseDir);
            // 创建一个文件流
            FileStream stream = System.IO.File.Create(filePath);
            // 将上传的文件写入流中
            fileParam.file?.CopyTo(stream);
            // 关闭流
            stream.Close();
            return ResultUtil.success(true);
        }
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    4、前端如何进行传参
    使用form-data传参,方式如下
    前端需要使用form-data传参,方式如下:
    在这里插入图片描述

    2.2 文件的下载

    开始编写具体的前端控制器
    注意,我们的返回值必须是IActionResult 或者它的子类泛型

    [Route("[controller]/[action]")]
    [ApiController]
    public class FileController : ControllerBase{
    
    	public IActionResult download()
        {
            string url = @"D:\xxx\xxx";
            // 读取文件信息
            FileInfo fileMetaInfo = new System.IO.FileInfo(url!);
            // 服务器文件路径
            string strFilePath = url!;
            // 创建文件读取流
            FileStream fileStream = System.IO.File.OpenRead(strFilePath);
            // 根据文件后缀获取文件的ContentType
            var fileExtensionContentTypeProvider = new FileExtensionContentTypeProvider();
            // 返回文件contentType类型
            var contentType = fileExtensionContentTypeProvider.Mappings[".png"];
            return File(fileStream, contentType, fileMetaInfo.Name);
        }
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    看完 2022 雷军年度演讲,我总结了我的故事
    站内搜索引擎
    SAR信号处理基础2——线性调频信号频谱与驻定相位原理
    sqlserver==索引解析,执行计划,索引大小
    部署你的第一个应用
    为什么AirtestIDE的selenium Window突然无法检索控件了?
    【零基础学Python】后端开发篇 第二十一节--Python Web开发二:Django的安装和运行
    什么是互联网打工人都需要知道的API?
    java 开发第一个app工程
    代码随想录算法训练营第五十五天| LeetCode647. 回文子串、516.最长回文子序列
  • 原文地址:https://blog.csdn.net/weixin_43702146/article/details/125887089