• 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
  • 相关阅读:
    1341. 电影评分
    【Kettle】 kettle | spoon | http请求 | 解析json | 结果入库
    QTableWidget 设置列宽行高大小的几种方式及其他常用属性设置
    Vue----生命周期函数
    windows10 + visual studio配置C/C++编译环境 和 vscode配置C/C++编译环境,以及opencv4.5.5环境
    BeanFactory和ApplicationContext
    上海鑫吉&百数——让制造型食品企业焕发新生机!
    java计算机毕业设计机械生产企业办公设备管理系统MyBatis+系统+LW文档+源码+调试部署
    OP analysis and design
    Linux系统故障排查和修复技巧
  • 原文地址:https://blog.csdn.net/weixin_43702146/article/details/125887089