动态保存.net核心文件

时间:2018-08-27 13:15:14

标签: c# .net asp.net-mvc file-upload asp.net-core-mvc

我具有将此功能保存在wwwroot文件夹中的文件:

[HttpPost]
public async Task<IActionResult> UploadFile(IFormFile file)
{
   if (file == null || file.Length == 0)
       return Content("file not selected");

   var path = Path.Combine( Directory.GetCurrentDirectory(), "wwwroot", file.FileName);

   using (var stream = new FileStream(path, FileMode.Create))
   {
      await file.CopyToAsync(stream);
   }

   return RedirectToAction("Files");
}

我正在尝试动态保存文件,以便每次上传文件时,该功能都会检查是否存在带有用户ID(来自会话)的文件夹。如果该文件夹存在,则将其保存在该文件夹中;否则,它将打开一个具有其ID的新文件夹。

我想为每个userId创建一个子文件夹,并将用户特定的文件保存到该文件夹​​

2 个答案:

答案 0 :(得分:0)

获取当前用户ID的最简单方法是:

var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);

然后,您只需将其放入路径中即可

var path = Path.Combine( Directory.GetCurrentDirectory(), $"wwwroot/users/{userId}", file.FileName);

答案 1 :(得分:0)

我添加了它,现在不起作用

var userId = HttpContext.Session.GetString("UserId");

        if (!Directory.Exists(Path.Combine(
                    Directory.GetCurrentDirectory(), $"wwwroot/{userId}")))
        {
            Directory.CreateDirectory(Path.Combine(
                    Directory.GetCurrentDirectory(), $"wwwroot/{userId}"));
        }