.Net Core 文件上传与下载

参考链接:

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

遇到的问题:

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

代码实现如下:

```Csharp

//文件上传

[HttpPost]
public async Task 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" });
}
 

```

文件下载

```csharp

[HttpGet]
public async Task 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。
}
```

 

 

 

你可能感兴趣的:(c#常用集合,NetCore,netcore,上传下载)