'Retreive the file name and size uploaded via postman in asp.net core

I have tried the following code ..

When I try out the following code I get 404 content not found. Also my controller doesn't get hit when I try to debug the code ..

public async Task<IActionResult> Download(string filename)
{
  if (filename == null)
  return Content("filename not present");

  var path = Path.Combine(Directory.GetCurrentDirectory(),"wwwroot", filename);
  var memory = new MemoryStream();
            using (var stream = new FileStream(path, FileMode.Open))
            {
                await stream.CopyToAsync(memory);
            }
            memory.Position = 0;


            return File(memory, GetContentType(path), Path.GetFileName(path));
        }


Solution 1:[1]

Upload file with size and filename as response:

public async Task<IActionResult> OnPostUploadAsync(IFormFile file)
{
    long size = file.Length;//in bytes
    if (file.Length > 0)
    {
        var name = Path.GetRandomFileName();
        //var fileOriginName = file.FileName;
        var path = Path.Combine(System.IO.Directory.GetCurrentDirectory(), "wwwroot", name);

        using (var stream = System.IO.File.Create(path))
        {
            await file.CopyToAsync(stream);
        }
        return Ok(new { size = size, filename = name });
    }
    else {
        return Ok(new { size = 0, filename = ""});
    }
}

enter image description here

===============================================

I have an api like below and I had a file test.txt in wwwroot folder.

public async Task<IActionResult> Download(string filename)
        {
            if (filename == null)
                return Content("filename not present");

            var path = Path.Combine(System.IO.Directory.GetCurrentDirectory(), "wwwroot", filename);
            var memory = new MemoryStream();
            using (var stream = new FileStream(path, FileMode.Open))
            {
                await stream.CopyToAsync(memory);
            }
            memory.Position = 0;
            var contentType = "APPLICATION/octet-stream";
            return File(memory, contentType, Path.GetFileName(path));
        }

Then when I call localhost:port/home/download?filename=test then I'll get exception that file can't find. And when I call localhost:port/home/Download?filename=test.txt it succeeds.

My API is in an asp.net core MVC project and I think you need to check the contentType.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Jeremy Thompson