2017-09-12 21 views
2

私はサーバー側がasp.netであるアプリケーションを持っています。私は、アプリケーションのAPIコントローラによってデータベースにバイトの配列として格納されている画像を表示したいと思います。これは角度のjsアプリです。角度のjsのapiコントローラによるバイト配列からの表示画像

[HttpPost] 
public ActionResult Create(House house,HttpPostedFileBase Photon) 
{ 
    if (ModelState.IsValid) 
    { 
     house.Id = Guid.NewGuid(); 

     if (Photon != null && Photon.ContentType.StartsWith("image")) 
     { 
      mImage img = new mImage 
      { 
       Photo = new byte[Photon.ContentLength], 
       PhotoType = Photon.ContentType, 
       photoName = Photon.FileName, 
       HouseId = house.Id 
      }; 
      Photon.InputStream.Read(img.Photo, 0, Photon.ContentLength); 
      db.mImages.Add(img); 
     } 
     var area = db.Areas.Find(house.AreaId); 
     house.visit = 0; 
     db.Houses.Add(house); 
     db.SaveChanges(); 

     return RedirectToAction("Index"); 
    } 

    ViewBag.AreaId = new SelectList(db.Areas, "Id", "name", house.AreaId); 
    return View(house); 
} 

このように表示されている:サーバ側で は、画像は、次のようにデータベースに格納されています。

[AllowAnonymous] 
public ActionResult ShowPhoto(Guid id) 
{ 
    using (var db = new myDB()) 
    { 
     var p = db.mImages.Find(id); 
     System.IO.MemoryStream myMemStream = new System.IO.MemoryStream(p.Photo); 
     System.Drawing.Image fullsizeImage = System.Drawing.Image.FromStream(myMemStream); 
     System.Drawing.Image newImage = fullsizeImage.GetThumbnailImage(150, 150, null, IntPtr.Zero); 
     System.IO.MemoryStream myResult = new System.IO.MemoryStream(); 
     newImage.Save(myResult, System.Drawing.Imaging.ImageFormat.Jpeg); //Or whatever format you want. 

     return File(myResult.ToArray(), "image/Jpeg"); 
    } 
} 

この方法を使用して画像をapiコントローラに表示するにはどうすればよいですか?

+0

私は何か不足していますか、単に参照することはできません。 ''(実際のGUIDに置き換えてください)? – DiskJunky

+0

私のasp.net mvcコントローラでこの作業を行いますが、私はAPIのコントローラによってcordovaアプリケーションで画像を表示したいのですが、データベースに保存された画像をどうすれば使用できますか?バイト配列 – marjaan

+0

のように保存した場合、 WebApiを使ってバイト配列を返し、メソッドの戻り値の型を 'byte []'にします。これを普通のコントローラから提供しているのであれば、バイト配列を(通常はJSONとして)直列化し、それを 'JsonResult'として返す必要があります。それとも私は要件を誤解していますか? – DiskJunky

答えて

0

OPのコメントに従って解決策を投稿してください。解決方法は、バイト配列をjsonとしてシリアル化し、JsonResultとして返します。

[AllowAnonymous] 
public ActionResult ShowPhoto(Guid id) 
{ 
    using (var db = new myDB()) 
    { 
     var p = db.mImages.Find(id); 
     System.IO.MemoryStream myMemStream = new System.IO.MemoryStream(p.Photo); 
     System.Drawing.Image fullsizeImage = System.Drawing.Image.FromStream(myMemStream); 
     System.Drawing.Image newImage = fullsizeImage.GetThumbnailImage(150, 150, null, IntPtr.Zero); 
     System.IO.MemoryStream myResult = new System.IO.MemoryStream(); 
     newImage.Save(myResult, System.Drawing.Imaging.ImageFormat.Jpeg);  //Or whatever format you want. 

     return Json(new { myResult.ToArray() }); 
    } 
} 
関連する問題