'Http post .csv file Angular 2 and then reading it on the server .NET

I'm trying to send .csv file from my client app (angular 2) to my web api (ASP.NET), and I have done the following:

Tried to make FormData from my .csv file the following way:

public sendData() {

   let formData = new FormData();
   formData.append('file', this.file, this.file.name);
   this.myService.postMyData(formData, this.name)
   .subscribe(data => this.postData = JSON.stringify(data),
              error => this.error = error,
              () => console.log('Sent'));

   }    

Created a service on the client app where I'm sending this .csv file from.

postMyData(formData: any, name: string) {

   this.s = <string><any>name;
   const headers = new Headers();
   headers.append('Content-Disposition', 'form-data');
   const url: string = 'myUrl?methodName=' + name;
   return this.http.post(url, formData, {headers: headers})
                   .map((res: Response) => res.json());

   }

What's the problem now is that I don't know how to get that .csv file on the server. I tried it with the code found below, but I can't get the real content, I can only see the name, content type, length and stuff like that.

 [HttpPost("GetMyCsvFile")]
    public async Task<IActionResult> GetMyCsvFile(string name) {

        var rawMessage = await Request.ReadFormAsync();

        var msg = rawMessage.Files[0];

      ....
    }

And then whatever I do with rawMessage, I can't get the content which I could read and do the stuff needed.

Is this possible to do?



Solution 1:[1]

You need to get the file and not the file name. Try this code, I'm getting a CSV file from my angular app.

 public async Task<bool> GetFileFromAngular(IFormFile file) {
        using (var reader = new StreamReader(file.OpenReadStream())) {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture) {
                HasHeaderRecord = true,
                MissingFieldFound = null,
                BadDataFound = null,
                TrimOptions = TrimOptions.Trim
            };

            using (var csv = new CsvReader(reader, config)) {
                try {
                    var records = csv.GetRecords<DrugFormulary>().ToList();
                    var csvProcessor = new CsvProcessor(_dbContext, _configuration);

                    await csvProcessor.ProcessPlan(records);
                } catch (System.Exception ex) {
                    throw ex;
                }
            }
        }
        return true;
    }

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 JEuvin