2020年4月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

最近のコメント

最近のトラックバック

無料ブログはココログ

« みずほ銀行システム統合、苦闘の19年史 史上最大のITプロジェクト「3度目の正直」 の感想 | トップページ

2020年4月19日 (日)

Base64で送信されてきたhtmlから画像ファイルの保存と、相対パスに書き換えるプログラム(C#)

ダウンロード - e8b387e69699.zip

ASP.Net(Web Form)で、クライアント側からBase64で送信されてきた画像ファイルを、html文から抜き出して、Webサーバに保存して、相対パスに置き換えるプログラムです。.aspxのプログラムから一部抜粋しています。



using System.Text.RegularExpressions;
using System.IO;

(省略)

#region SaveBase64ToImageAndReplaceUrl/ Base64で送信されたhtmlから画像ファイルをサーバに保存して、URLを置き換える
        /// 
        /// Base64で送信されたhtmlから画像ファイルをサーバに保存して、URLを置き換える
        /// 
        /// html
        /// 置き換えられたhtml
        public static string SaveBase64ToImageAndReplaceUrl(string htmlContent)
        {
            //base64の正規表現 
            string strImg = @"data\:image/(jpeg|png|gif|jpg|bmp);base64\,(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?";

            //正規表現で、Base64を画像ファイルへの相対パスに置き換える
            string content = Regex.Replace(htmlContent, strImg, new MatchEvaluator(ReceiveImage), RegexOptions.Compiled | RegexOptions.IgnoreCase);
            return content;
        }
        #endregion

        #region ReceiveImage / 画像ファイルを受信して、サーバに保存して、相対パスを返す
        /// 
        /// 画像ファイルを受信して、サーバに保存して、相対パスを返す
        /// 
        /// 正規表現で一致したBase64の文字列
        /// 画像ファイルへの相対パス
        private static string ReceiveImage(Match match)
        {
            return ReceiveImage(match.Value);
        }

        /// 
        /// 画像ファイルを受信して、サーバに保存して、相対パスを返す
        /// 
        /// 正規表現で一致したBase64の文字列
        /// 画像ファイルへの相対パス
        private static string ReceiveImage(string imgBase64)
        {
            
            if (imgBase64.Substring(0, 10) != "data:image")
                return imgBase64;

            //拡張子を取得
            string fileExtention = GetImageFileExtention(imgBase64);

            //Base64の先頭部分を取る
            imgBase64 = Regex.Replace(imgBase64, @"data\:image/(jpeg|png|gif|jpg|bmp);base64\,","");

            //バイト配列にしてから、サーバの設置場所にファイルを保存する
            Byte[] imgByteArray = Convert.FromBase64String(imgBase64);

            string SavePath = HttpContext.Current.Server.MapPath("../Upload/");

            string filename = DateTime.Now.ToString("yyyyMMddHHmmssfff") + fileExtention;

            File.WriteAllBytes(SavePath + filename, imgByteArray);

            //相対パスを返す
            return "../Upload/" + filename;
        }
        #endregion

        #region GetImageFileExtention/ 拡張子を取得する
        /// 
        /// 拡張子を取得する
        /// 
        /// Base64のコード
        /// 
        private static string GetImageFileExtention(string imgBase64)
        {
            //ファイルの種類を取得する
            Regex re = new Regex(@"data\:image/(?.*?);base64\,", RegexOptions.IgnoreCase
                                | RegexOptions.Singleline);
            Match match = re.Match(imgBase64);

            //拡張子にして返す
            return "." + match.Groups["fileExtention"].Value;
        }
        #endregion

« みずほ銀行システム統合、苦闘の19年史 史上最大のITプロジェクト「3度目の正直」 の感想 | トップページ

システム開発」カテゴリの記事