ASP.NET Core使用IFormFile上载文件名中带有路径的文件

时间:2019-04-12 00:45:54

标签: asp.net-core

 [HttpPost("FilePost")]
    public async Task<IActionResult> FilePost(List<IFormFile> files)
    {
        long size  = files.Sum(f => f.Length);
        var filePath = Directory.GetCurrentDirectory() + "/files";
        if (!System.IO.Directory.Exists(filePath))
        {
            Directory.CreateDirectory(filePath);
        }

        foreach (var item in files)
        {
            if (item.Length > 0)
            {
                using (var stream = new FileStream(filePath,FileMode.CreateNew))
                {
                    await item.CopyToAsync(stream);
                }
            }
        }
        return Ok(new { count = files.Count, size, filePath });

    }

FormFile。 FileName =目录+文件名,

上传的文件,带有路径信息的文件名,怎么办?

我只需要获取文件名即可。

3 个答案:

答案 0 :(得分:0)

似乎您想根据文件路径获取文件名。 您可以将其弄清楚

using System.IO;

Path.GetFileName(filePath);

或扩展方法

public static string GetFilename(this IFormFile file)
{
    return ContentDispositionHeaderValue.Parse(
                    file.ContentDisposition).FileName.ToString().Trim('"');
}

如果需要帮助,请告诉我

答案 1 :(得分:0)

  

我只需要获取文件名即可。

使用Path.GetFileName()获取文件名,然后使用Path.Combine()将所需的保存路径与文件名结合起来,尝试下面的代码

 var filesPath = Directory.GetCurrentDirectory() + "/files";
        if (!System.IO.Directory.Exists(filesPath))
        {
            Directory.CreateDirectory(filesPath);
        }

        foreach (var item in files)
        {
            if (item.Length > 0)
            {
                var fileName = Path.GetFileName(item.FileName);
                var filePath = Path.Combine(filesPath, fileName);
                using (var stream = new FileStream(filesPath, FileMode.CreateNew))
                {
                    await item.CopyToAsync(stream);
                }
            }
        }

答案 2 :(得分:0)

我在使用不同的浏览器时遇到了同样的问题。 IE发送具有完整路径的FileName,而Chrome仅发送文件名。我使用Path.GetFileName()来解决问题。

其他解决方法在您的前端。 Refer这可以从前端解决。