2016-09-27 10 views
2

私はアプリケーションを構築するのにAngularJSを使用しています。その中には、ユーザーが情報を記入できる形式があります。 WebAPIを使用してデータベースにPOSTするオブジェクトが作成されます。WebAPIでファイルを添付してオブジェクトをPOSTする方法は?

ここ角度コードです:

$scope.test_object = 
{ 
    'Title': $scope.test_object.title, 
    'Description': $scope.test_object.description, 
}; 

// POST to the database 
$http.post(some_url, JSON.stringify($scope.test_object)).then(function (response) { 
     // do something 
    } 
); 

そして、ここでは、私のクラスは、Visual Studioにあります:

public class ClassName 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
} 

は、それが何の問題もなく必要としてこれが動作します。私の問題は、フォームにファイルを添付できることです。

public class FileUploadController : ApiController 
{ 

    [Route("api/upload")] 
    public async Task<HttpResponseMessage> Post() 
    { 
     try 
     { 
      if (!Request.Content.IsMimeMultipartContent()) 
      { 
       throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
      } 

      //Save To this server location 
      var uploadPath = HttpContext.Current.Server.MapPath("~/Data"); 

      //Save file via CustomUploadMultipartFormProvider 
      var multipartFormDataStreamProvider = new CustomUploadMultipartFormProvider(uploadPath); 

      // Read the MIME multipart asynchronously 
      await Request.Content.ReadAsMultipartAsync(multipartFormDataStreamProvider); 

      // Show all the key-value pairs. 
      foreach (var key in multipartFormDataStreamProvider.FormData.AllKeys) 
      { 
       foreach (var val in multipartFormDataStreamProvider.FormData.GetValues(key)) 
       { 
        Console.WriteLine(string.Format("{0}: {1}", key, val)); 
       } 
      } 

      //In Case you want to get the files name 
      //string localFileName = multipartFormDataStreamProvider 
      // .FileData.Select(multiPartData => multiPartData.LocalFileName).FirstOrDefault(); 

      return new HttpResponseMessage(HttpStatusCode.OK); 
     } 
     catch (Exception e) 
     { 
      return new HttpResponseMessage(HttpStatusCode.NotImplemented) 
      { 
       Content = new StringContent(e.Message) 
      }; 
     } 
    } 
} 

私はオンラインこのコードを発見し、それは、ファイルを送信するために動作します:私はここのコードは、ファイルを送信するためにVisual Studioでのコントローラを持っています。これにより、任意のファイルが指定されたフォルダ(/ Data)に送信されます。

私の質問は、オブジェクトと添付ファイルの間の関係をどのように作成するのですか?各オブジェクトにどのファイルが関連付けられているかを確認するにはどうすればよいですか?どういうわけかオブジェクトIDをファイルとともに送信しますか?

ありがとうございました。

答えて

1

これらの状況でできることは、ファイルが保存されている場所のアドレスをオブジェクトのプロパティに保存することです。インスタンスのために、あなたはこのようなあなたのクラスにプロパティを追加することができますので:

public class ClassName 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
    public string FilePath { get; set; } 
} 

そして、あなたはディレクトリにファイルを書くとき、あなたはファイルパスプロパティにファイルのアドレスをコピーします。

関連する問題