2012年9月23日日曜日

[ASP.NET MVC] WebAPI で画像を返す

画像ファイルを読み込んで返す。

        // ロギング用
        private static Logger logger = LogManager.GetCurrentClassLogger();

        // ローカル画像を読み込んで返す
        public HttpResponseMessage Get()
        {
            try
            {
                var stream = new FileStream(@"C:\temp\1.png", FileMode.Open);

                var res = new HttpResponseMessage()
                {
                    Content = new StreamContent(stream)
                    ,
                    StatusCode = System.Net.HttpStatusCode.OK
                };
                res.Content.Headers.ContentType 

                    = new System.Net.Http.Headers.MediaTypeHeaderValue("image/jpeg");
                return res;
            }
            catch (Exception ex)
            {
                logger.ErrorException("画像取得中にエラーが発生しました", ex);
                return new HttpResponseMessage()
                {
                    Content = new StringContent("予期せぬエラーが発生しました。")
                    ,
                    StatusCode = System.Net.HttpStatusCode.InternalServerError
                };
            }
        }




Imageクラスを(バイト配列にして)返す事もできる。
   

        // ローカルの画像ファイルをImageクラスに読み込んで返す
        public HttpResponseMessage Get()
        {
            try
            {
                byte[] bytes = null;

                // 画像をImageクラスに読み込む
                using (Image img = Image.FromFile(@"C:\temp\1.png"))
                using (Graphics g = Graphics.FromImage(img))
                {
                    // 現在時刻とか書き込んでみる

                    g.DrawString("Hello WebAPI."
             , new Font("MS Gothic", 10)
             , Brushes.Black, 10, 80);
                    g.DrawString(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), 

                        new Font("MS Gothic", 10)
           , Brushes.Black, 10, 100);

                    // バイト配列にする
                    ImageConverter imgconv = new ImageConverter();
                    bytes = (byte[])imgconv.ConvertTo(img, typeof(byte[]));
                }

                var res = new HttpResponseMessage()
                {
                    Content = new ByteArrayContent(bytes)                    ,
                    StatusCode = System.Net.HttpStatusCode.OK
                };
                res.Content.Headers.ContentType 

                    = new System.Net.Http.Headers.MediaTypeHeaderValue("image/png");
                return res;
            }
            catch (Exception ex)
            {
                logger.ErrorException("画像取得中にエラーが発生しました", ex);
                return new HttpResponseMessage()
                {
                    Content = new StringContent("予期せぬエラーが発生しました。")
                    ,
                    StatusCode = System.Net.HttpStatusCode.InternalServerError
                };
            }
        }



ロギングとかエラーの返し方は適当








0 件のコメント:

コメントを投稿