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

15 篇文章 0 订阅
13 篇文章 1 订阅

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{

}

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

public class FileParam
{
    //文件id
    public long? fileId { get; set; }
    
    // 文件
    public IFormFile? file{ get; set;}
}

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);
    }
    
}

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);
    }
    
}
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L-960

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值