今日もちょいつか

お酒の飲み過ぎか、それとも歳のせいなのか毎日ちょっぴり疲れ気味なフリーのソフト屋です。ソフト開発の話題をblogにしてみます。

ASP.NET Core MVC MySQLへ画像ファイルを保存・表示してみる

ASP.NETで画像ファイルをMySQLに保存する方法を調査してみました。
正常に保存されているか確認するために、表示もしてみます。
Visual Studio Community 2017 for Mac で動作確認しています。

Model

Idと画像ファイル保存用だけのシンプルなクラスです。

public class TestImage
{
    [Key]        
    public int Id { get; set; }

    [Column(TypeName = "mediumblob")]
    public byte[] ImageFile { get; set; }
}

C#側は、byte[]、MySQL側は mediumblob型 を指定します。
MySQLの型を指定しないでマイグレーションを実行すると
blob型にマッピングされます。
blob型だと、保存できるファイルサイズが64KBまでとなりますので注意が必要です。
あとは、マイグレーションを実行してMySQLにテーブルを作成します。

Controller MySQLへ保存

using System.Drawing;
using System.IO;

public IActionResult Index()
{
    Bitmap Image = new Bitmap("/tmp/20151101-1.png");
    MemoryStream ms = new MemoryStream();
    Image.Save(ms, Image.RawFormat);
    
    var TestImage = new TestImage
    {
        ImageFile = ms.ToArray()
    };

     DbContext.TestImage.Add(TestImage );
     DbContext.SaveChanges();

     return View();
}

画像を保存するテストなので/tmpフォルダに画像ファイルがある前提です。

画像を表示する View と Controller

まずはViewです。

<div>
    <p>画像表示</p>
    <img src="Home/ImageDisp/5" width="50">
</div>

そして、Controller。

public IActionResult ImageDisp(int Id)
{
         var Img = DbContext.TestImage.SingleOrDefault(m => m.Id == Id);
         MemoryStream ms = new MemoryStream(Img.ImageFile);

         return new FileStreamResult(ms, "image/png");
}

引数にIdを渡して、そのIdから画像のデータを取得して画像データを戻します。

今回は案外ハマらずにすんなりと実現することができました。
これぐらい順調に実現できるとASP.NETも楽しく感じます。

仕事の気分転換に、自立式ハンモック

以前からハンモックに憧れていたのですが。
屋内で使える自立式ハンモックがあるのですね。
どんなのが良いのかわからないので、1万円を切るくらいのを買ってみました。
想像していたより気持ちがいいです。
特に左右に揺らすととても気分が癒やされます。
プログラムでハマった時に気持ちを落ち着けることができそうです。