2016-06-21 9 views
0

Ich muss eine Excel-Datei lesen und es auf einem WebApi-Endpunkt veröffentlichen. Der Endpunkt hat einen Parameter import vom Typ namens HttpPostedFileBase als unterC# Posting Excel-Datei mit httpclient

gegeben
[AcceptVerbs(HttpVerbs.Post)] 

public JsonResult Upload(HttpPostedFileBase import) 
{ 
} 

Wie kann ich meine FileStream oben Methode HttpClientPostAsync Methode senden.

Vielen Dank im Voraus

Antwort

0

Es funktioniert für mich, wie unten

using (var content = new MultipartFormDataContent()) 
     { 
      var stream = new StreamContent(File.Open(filePath,FileMode.Open)); 

      stream.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
      stream.Headers.Add("Content-Disposition", "form-data; name=\"import\"; filename=\"attendances.xslx\""); 
      content.Add(stream, "import", "attendances.xslx"); 

      var response = client.PostAsync(methodePath, content).Result; 
      var result = response.Content.ReadAsAsync<ResponseModel<AttendanceModel>>().Result; 
      return result.IsSuccess; 
     } 
0

Aus meiner Erfahrung müssen Sie die Datei aus dem Request Objekt erhalten, und es gibt keine Notwendigkeit von HttpPostedFileBase

[HttpPost] 
public ActionResult Upload(WhateverModel model) 
{ 
    fileName = file.FileName; 
    var dataList = new List<ExcelDataModel>(); 
    using (var package = new ExcelPackage(file.InputStream)) 
    { 
     var currentSheet = package.Workbook.Worksheets; 
     var workSheet = currentSheet.First(); 
     var rowCount = workSheet.Dimension.End.Row; 

     for (int i = 2; i <= rowCount; i++) 
     { 
      var dm = new ExcelDataModel 
      { 
       Value = workSheet.Cells[i, 1].Value.ToString(), 
       Name = workSheet.Cells[i, 2].Value.ToString(), 
       Label = workSheet.Cells[i, 3].Value.ToString() 
      }; 

      dataList.Add(dm); 
     } 
    } 
} 

I OfficeOpenXml mit Excel zu arbeiten, verwendet wird, können Sie es als bekommen ein kleines Paket.

+0

Danke, aber ich glaube, Sie meine Frage nicht bekam habe ich client.postAsync (Filestream als param zum Beispiel eine Datei zu diesem api von meiner Seite zu stellen (Import) hier), aber PostAsync nicht erlauben, den Filestream direkt zu posten. Ich frage nur, wie ich meinen Filestream zu dieser API von meiner Seite aus posten kann. – jitender

+0

@jitender Ich denke, das könnte Ihnen helfen: http://stackoverflow.com/questions/10339877/asp-net-webapi-how-to-perform-a-multipart-post-with-file-upload-using-webapi- ht – Alex

+0

Danke es funktioniert für mich mit einer kleinen Änderung stream.Headers.Add ("Content-Disposition", "Formulardaten; Name = \" Import \ "; Dateiname = \" attencances.xslx \ ""); Nochmals vielen Dank – jitender