2016-07-04 24 views
0

私はクライアント側(AngularJSを使用しています)のファイルストリームをJSONオブジェクト経由でasp.netのWeb Apiにアップロードするシナリオを持っています。 JSONオブジェクトには、1つのフィールドがファイルstreamであるいくつかのフィールドがあります。JSONオブジェクトを作成して、モデルにapi側でモデルバインドを行うWeb APIに送信します。JSONオブジェクト経由でファイルストリームをASP.NETのWeb API 2にアップロードするにはどうすればよいですか?

$scope.fileUploadData = { 
     TextId: 304765, 
     DocumentId: 0, 
     PatientId: 166158, 
     file://This is my file stream property in JSON 
} 

    public ApiActionResult CreateDocument(DocumentVM model) 
{ 
    //Some logic here..... 
} 

// DocumentVM class will be as follows 
public class DocumentVM 
{ 
     long TextId; 
     long DocumentId; 
     long PatientId; 
     Stream file; 
} 

サンプルコードスニペットの達成方法を教えてください。
私が試したこと: 私はたくさんのグーグルで探究しましたが、私はマルチパートフォームデータを使用するようなソリューションを見つけました。 JSONとファイルストリームが追加され、Web APIに送信されます。私は、以下のロジックを使用して複数の部分のフォームデータを抽出しました。

public async Task<ApiActionResult> CreateDocument() 
{ 
    MultipartFormDataStreamProvider provider = 
      new MultipartFormDataStreamProvider(Path.GetTempPath()); 
      var result = await Request.Content.ReadAsMultipartAsync(provider); 
      var model= result.FormData["Metadata"]; 
      var fileData = result.FileData;//How it will retriev the file data 
} 
+0

をコントローラあなたに

public class MyModelBinder : IModelBinder { public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext) { // Extract the posted data from the request // Convert the base64string to Stream // Extract the model from the bindingcontext // Assign the model's property with their values accordingly } } 

以下のような、あなたのアクションのモデルに装飾することができるカスタムモデルバインダーを作成することができますストリームファイル。複数の部分からなるリクエストを作成する必要があります。 javascript側では、Fileオブジェクトを作成する必要があります。これは、マルチパートリクエストを使用してサーバーに渡されます。 – dhavalcengg

+0

ストリームをAPIに送るために、マルチパートフォームデータ以外のオプションはありませんか? –

答えて

1

はあなたの問題の解決策かどうかを得たかどうかわからない...しかし、私は同じシナリオを持っていたし、

の下に同じ

を行うための2つの方法がありますように私はそれを解決しました

アプローチ1: 使用MultipartFormDataあなたはこのapproaを試みたことに言及しているあなたの質問には、このlink

を確認し、あなたのWEBAPIに直接ストリームを渡します私はあなたのhtml形式でenctype="multipart/form-data"を使用していないと思います。

アプローチ2:あなたはできません、単純なJSONオブジェクトで

public ApiActionResult SaveDocument([ModelBinder(typeof(MyModelBinder))]DocumentVM contentDTO) 
関連する問題