⭐️ Furion v4 版本支持【所有历史版本】无缝升级,一套代码兼容 .NET 5+ ⭐️
Skip to main content

2. 文件上传下载

· 2 min read
dotNET China

文件下载

[HttpGet, NonUnify]public IActionResult FileDownload(string path, string fileName){    string filePath = "这里获取完整的文件下载路径";    return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };}
关于前端获取文件名

如果前端获取不到文件夹,可添加以下配置:

_httpContextAccessor.HttpContext.Response.Headers.Add("Content-Disposition", $"attachment; filename={文件名}");_httpContextAccessor.HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");

文件上传

[HttpPost, NonUnify]public async Task<IActionResult> UploadFileAsync(List<IFormFile> files){    // 保存到网站根目录下的 uploads 目录    var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, "uploads");    if(!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);    long size = files.Sum(f => f.Length);    foreach (var formFile in files)    {        if (formFile.Length > 0)        {            // 避免文件名重复,采用 GUID 生成            var filePath = Path.Combine(savePath, Guid.NewGuid().ToString("N") + Path.GetExtension(formFile.FileName));  // 可以替代为你需要存储的真实路径            using (var stream = System.IO.File.Create(filePath))            {                await formFile.CopyToAsync(stream);            }        }    }    // 在动态 API 直接返回对象即可,无需 OK 和 IActionResult    return Ok(new { count = files.Count, size });}
关于使用axios上传文件,方法获取到参数files.Count=0

axios请求配置

    let formData = new FormData();    formData.append("files", this.file); //files需与方法里的参数files名称一样    let config = {      headers: {        "Content-Type": "multipart/form-data",      },    };    axios.post(this.uploadURL, formData, config).then((res) => {//需引入axios      console.log(res);    });
演练场