.Net Core 文件上传与下载

参考链接:

  1. ASP.NET Core 2 系列 - 上傳/下載檔案
  2. 网页下载文件,设置的文件名无效?下载下来是网页名称
  3. MVC 使用FileStreamResult方法的下载excel和word文件问题

遇到的问题:

  1. 按 参考1 中测试,下载文件文件名总是变成方法名(DownloadFile),并且没有文件扩展名,保存后改扩展名可正常查看。
  2. 参考 链接3 测试无效,未解决下载问题。
  3. 参考 链接2,问题解决。
    代码实现如下:

文件上传

[HttpPost]
public async Task<ActionResult> UploadFile()
{
   _folder = $@"{env.WebRootPath}\Upload";//env 可通过Controller的参数传入,并取得:IHostingEnvironment _env
    string controller = RouteData.Values["controller"].ToString();
    var dirPath = _folder + $"/Template/{controller}";
    if (!Directory.Exists(dirPath))
    {
        Directory.CreateDirectory(dirPath);
    }

    var size = Request.Form.Files.Sum(f => f.Length);
    IFormFile file = Request.Form.Files.FirstOrDefault();
    if (file.Length > 0)
    {
        var filePath = $@"{dirPath}\{file.FileName}";
        using (var stream = new FileStream(filePath, FileMode.Create))
        {
            await file.CopyToAsync(stream);//写入到服务器。
        }
    }
    _controllername = RouteData.Values["controller"].ToString();
    string Id = Request.Form["Id"].First();
    var path = $"/api/{_controllername}/Detail/{Id}";
    var data = _excelTemplateDocService.Get(path).Result.FirstOrDefault();

    if(data!=null)
    {
        data.ExcelPath = file.FileName;
        path = $"/api/{_controllername}";
        await _excelTemplateDocService.Post(path, data);
    }
    else
    {
        return BadRequest("ExcelPath未更新!");
    }
    return Ok(new { code = 200, message = "success" });
}

文件下载


[HttpGet]
public async Task<IActionResult> DownloadFile(string fileName)
{
    if (string.IsNullOrEmpty(fileName))
    {
        return NotFound();
    }
    string controller = RouteData.Values["controller"].ToString();
    var path = _folder + $"/Template/{controller}/{fileName}";
    var memoryStream = new MemoryStream();
    using (var stream = new FileStream(path, FileMode.Open))
    {
        await stream.CopyToAsync(memoryStream);
    }
    memoryStream.Seek(0, SeekOrigin.Begin);
    //文件名必须编码,否则会有特殊字符(如中文)无法在此下载。
    string encodeFilename = msSystem.Web.HttpUtility.UrlEncode(fileName, msSystem.Text.Encoding.GetEncoding("UTF-8"));
    Response.Headers.Add("Content-Disposition", "attachment; filename=" + encodeFilename);
    return new FileStreamResult(memoryStream, "application/octet-stream");//文件流方式,指定文件流对应的ContenType。
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值