2016-04-04 11 views
0

基本的に私が望むのは、mi web apiにファイルを送信し、それを紺碧にアップロードすることです。 ファイルを選択するとこのコードがトリガされますが、正しいかどうかわかりません。 asp.net web apiにファイルを送るにはどうすればいいですか?

$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#コード(バックエンド) このコードは、私がバックエンドで得るものですが、常にあれば "UnsupportedMediaType" 私はいけないが、知ってもらいます問題は、角であるか、またはASPで私を助けてください!

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

答えて

0

anglejsコードは問題ありません。 asp.netコードを次のように更新する必要があります。

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); 
     } 
    } 
関連する問題