whuanle
whuanle

Reputation: 89

ASP.NET Core uploads files using IFormFile with a path in the file name

 [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 = directory + filename,

Uploaded file, file name with path information, how to do?

I just need to get the name of the file.

Upvotes: 0

Views: 10944

Answers (3)

cdev
cdev

Reputation: 5351

I faced the same issue with different browsers. IE send FileName with full path and Chrome send only the file name. I used Path.GetFileName() to overcome issue.

Other fix is at your front end side. Refer this to solve from it front end side.

Upvotes: 0

Xueli Chen
Xueli Chen

Reputation: 12695

I just need to get the name of the file.

Use Path.GetFileName() to get the name of the file , and use Path.Combine() to combine the the save path you want with the file name , try the code like below

 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);
                }
            }
        }

Upvotes: 2

user4851087
user4851087

Reputation:

Seem like you want to get the file name base on your file path. You can get it into way

using System.IO;

Path.GetFileName(filePath);

or extension method

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

Please let me know if you need any help

Upvotes: 0

Related Questions