asp.net core像springboot非常相似,我们从一个springboot文件上传与下载的例子来引到asp.net core的文件上传与下载:
本文asp.net core版本为:6.0
在controller中接收MultipartFile
即可。
前端需要使用form-data传参,方式如下:
参考这篇文章:
spring controller实现下载文件的两种方式
还是那句话,官网虽然已经很详细了,但是看起来还是很抽象、晦涩。
下面通过几个例子来完成文件的上传与下载。
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传参,方式如下:
开始编写具体的前端控制器
注意,我们的返回值必须是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);
}
}