2016-11-26 8 views
0

ノックアウトを学び、写真アップローダを作成しようとしています。私は正常にいくつかの画像を配列に格納しました。今私はポストバックしたい。私のノックアウトコード(Javascriptを)では、私はこれを行う:イメージ - > JSON - >。ネットイメージ

私はJavaScriptで画像「クラス」を持っている:

// The image object that wukk be posted back. 
function Image(_Image, _Description, _Filesize, _Filetype) { 
    var self = this; 
    self.Image =_Image; 
    self.Description = _Description; 
    self.Filesize = _Filesize; 
    self.Filetype = _Filetype; 

    self.DisplaySize = ko.computed(function() { 
     SizeToText(self.Filesize); 
    }); 
} 

私は「画像」と呼ばれるプロパティにこれらの配列を持っています。

[保存]ボタンをクリックすると、イメージの配列を 'オブジェクト'に単純にストライプ化しようとします。

var object = JSON.stringify({ 
       images: self.images(), 
      }); 

次に、オブジェクトを自分の.net WebAPIコントローラに戻します。

var uri = "/api/Photo/Upload"; 
    $.post({ url: uri, contentType: "application/json" }, object) 
    .done(function (data) { 
     self.images.removeAll(); 
    }); 

私のメソッドが呼び出されます、と私はそれが受け取るデータで見ることができ、全ての画像データなど

記述方法は次のように定義されています

public int Upload(UIImageUploadList data) 

とUIImageUploadList画像のリストを保持するクラスです。

public class UIImageUploadList 
{ 
    public List<UIImageUpload> Images { get; set; } 
} 

とUIImageUploadは次のとおりです。

public class UIImageUpload 
    { 

     public string Image { get; set; } 
     public string Description { get; set; } 
     public string FileType { get; set; } 
     public int FileSize { get; set; } 

    } 

したがって、私は自分のサービス/ロジック/データレイヤーに渡すことができるように、 'データ'フィールドからデータを解析します。

foreach(var p in data.Images) 
      { 
       JavaScriptSerializer json_serializer = new JavaScriptSerializer(); 
       var routes_list = 
         json_serializer.DeserializeObject(p.Image); 


       byte[] bytes = Convert.FromBase64String(p.Image); 

       Image image; 
       using (MemoryStream ms = new MemoryStream(bytes)) 
       { 
        image = Image.FromStream(ms); 
       } 

       photos.Add(new Photo 
       { 
        Description = p.Description, 
        PhotoData = image 
       }); 
      } 

しかし、それはBase64にあります。 (JSON.Stringifyは私が信じていた)。

画像プロパティは、こので始まる:

"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJY 

で終わる:

AElFTkSuQmCC" 

私はそれが.NETで

などJPGまたはBMPだ場合、私がしようと知っていますこれをImageタイプに変更して、私のDBに渡してください。

しかし、「データがプリミティブなJSONタイプではない」という「DeserializeObject」に失敗します。

最終的にデータベースに保存されるイメージにどのように変換する必要がありますか?

答えて

1

Convert.FromBase64Stringを呼び出す前に、エンコードされた画像データを含む文字列を分割する必要があります。まず、data:のストリップ、画像のMIMEタイプ(image/png)を取得すると、エンコーディング(base64)と残りの文字列(コンマの後)のみを変換関数に渡すことができます。私はC#で多くの経験を持っていませんが、そこからFromStream関数は、デコードされたデータを処理するのに十分スマートでなければなりません。

関連する問題