2016-04-04 17 views
0

Temel olarak istediğim, mi web api'ye bir dosya yollamak ve daha sonra onu azure'a yüklemek. Dosyayı seçtiğinizde bu kod tetiklenir, ancak doğru olup olmadığından emin değilim. Nasıl asp.net web api bir dosya açısal ile gönderilir?

$scope.fileNameChanged = function(files) 
 
{ 
 
    var formD = new FormData(); 
 
    var reader = new FileReader(); 
 
    reader.onload = function(e) 
 
    { 
 
     $scope.$apply(function() 
 
     { 
 
      $scope.files = reader.result;  
 
     }); 
 
     
 
    }; 
 
    formD.append("file",files.files[0]); 
 
    reader.readAsText(files.files[0]); 
 

 
    $http({ 
 

 
    method: 'POST', 
 
    headers: {'Content-Type': undefined}, 
 
    data:{formD}, 
 
    transformRequest : angular.identity, 
 
    url: 'http://localhost:12199/api/FacturacionWeb/PostFormData' 
 
     
 
    }).success(function(data) 
 
    { 
 
     
 
    }).then(function(dat) 
 
     { 
 
     
 
     }) 
 
     
 
}
<input type="file" multiple onchange="angular.element(this).scope().fileNameChanged(this)"> 
 
    <div>Import file...</div> 
 

 
    <div> 
 
    <textarea ng-model="files" accept=".txt" readonly="true" style="width:99%; height:500px" disabled></textarea>

ASP.NET C# KOD (arka uç) bu kod i arka uç olsun ama hep ben eğer bilmiyorum "UnsupportedMediaType" elde ediyoruz sorun açısal ya da asp ile yardım lütfen bana lütfen!

public async Task<HttpResponseMessage> PostFormData(HttpRequestMessage request) 
    { 
     // Check if the request contains multipart/form-data. 
     if (!Request.Content.IsMimeMultipartContent()) 
     { 
      throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
     } 

     string root = HttpContext.Current.Server.MapPath("~/App_Data"); 
     var provider = new MultipartFormDataStreamProvider(root); 

     try 
     { 
      // Read the form data. 
      await Request.Content.ReadAsMultipartAsync(provider); 

      // This illustrates how to get the file names. 
      foreach (MultipartFileData file in provider.FileData) 
      { 
       Trace.WriteLine(file.Headers.ContentDisposition.FileName); 
       Trace.WriteLine("Server file path: " + file.LocalFileName); 
      } 
      return Request.CreateResponse(HttpStatusCode.OK); 
     } 
     catch (System.Exception e) 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); 
     } 
    } 

cevap

0

Angularjs kodunuz gayet iyi. As.net kodunuzu güncellememiz gerekmektedir. As-

public async Task<HttpResponseMessage> PostFormData(HttpRequestMessage request) 
    { 
     // Check if the request contains multipart/form-data. 
     if (!request.Content.IsMimeMultipartContent("form-data")) 
      { 
      throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
     } 

     string root = HttpContext.Current.Server.MapPath("~/App_Data"); 
     var provider = new MultipartFormDataStreamProvider(root); 

     try 
     { 
      // Read the form data. 
      await Request.Content.ReadAsMultipartAsync(provider); 

      // This illustrates how to get the file names. 
      foreach (MultipartFileData file in provider.FileData) 
      { 
       Trace.WriteLine(file.Headers.ContentDisposition.FileName); 
       Trace.WriteLine("Server file path: " + file.LocalFileName); 
      } 
      return Request.CreateResponse(HttpStatusCode.OK); 
     } 
     catch (System.Exception e) 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); 
     } 
    } 
İlgili konular