Webサイトでは、画像データが存在している必要があります。保存する画像に対処する方法を、多くの方法があります。
2つの方法で自身の要約:1、静的なドキュメント形式として画像の保存;(長所:簡単なファイル転送、バックアップ;短所:ない簡単に失われたファイルを回復するために)2は、画像が(完全な画像データのストレージを取得する他の方法のために資格をバイトストリームに変換され、長所:簡単に失われ、データベースを保存します。欠点:データベース領域)が急速に成長しています
画像を保存する前に、元のコンテンツの画像は、ファイル名と格納されている他の基本的な情報によって処理されていない、最近の画像データを保存するための別の方法を実行したかった;特別な記録。
ファイルの完全な情報の保存、一般的な方法は、バイナリストリームにファイルを変換することで、データベースに保存され、もちろん、あなたがbase64のデータストリームとして画像を保存することができます。
1、ツール:データベースのSQLServer 2012 R2、開発言語:C#、表示形式:MVCで処理するウェブ表示のため。
図2に示すように、コア・データベース・フィールドは、画像情報テーブルを説明:含むFileContentのvarbinary(max)のNULL、----画像コンテンツ記憶フィールド、フィールドタイプ のvarbinary(MAX) - >対応するフィールドタイプバイトのC#[]
3、(データベースストレージ用)画像ファイルのバイトストリームを取得します
/// <要約> ///は、画像バイトストリームのバイトに基づいて画像のパスを返します[] /// </要約> /// ます。<param name = "IMAGEPATH"> イメージパス</ param>の /// <戻り値> 戻りバイトストリーム</戻り> パブリック 静的 バイト [] getImageByte(文字列IMAGEPATH) { のFileStreamファイル = 新しい新規のFileStream(IMAGEPATH、FileMode.Open); バイト [] = imgByte 新しい新しい バイト[files.Length]; files.Read (imgByte、0 、imgByte.Length); files.Close(); 戻りimgByte; }
図4に示すように、取得された画像は、データベースのバイトストリームに格納されています
/// <まとめ> /// コンテンツ情報データベースに画像を追加 /// </要約> /// <PARAM名= "パス"> </ PARAM> /// <戻りA> </戻りA> パブリック 静的 INT InsertImg(文字列のパス) { // ----------方法原稿画像が読み取られ、バイトストリームに変換する のFileStream FSを= 新しい新規のFileStream(パス、FileMode.Open); バイト [] = imgSourse 新しい新 バイト[fs.Length]; fs.Read(imgSourse、0 、imgSourse.Length); fs.Close(); //--------------读取图片并转化成字节流结束---------------- 使用(SqlConnectionのCONN = 新しいSqlConnectionオブジェクト(SqlHelperを。 connStr)) { conn.Open(); 使用(SqlCommandオブジェクトCMD = conn.CreateCommand()) { // cmd.CommandText = "更新PictureInfo設定含むFileContent = @ ImageLogo"。 cmd.CommandText = " PictureInfo(含むFileContent)への挿入は含むFileContent = @含むFileContent VALUES " 。 // cmd.Parameters.Add( "@含むFileContent"、System.Data.SqlDbType.Image)。 cmd.Parameters.Add(新SqlParameter(" @fileContent " 、imgSourse)); リターンcmd.ExecuteNonQuery(); } } }
5は、ページを表示するには、データベースの画像の情報を読み取る(Winフォームがありピクチャーコントロールは、画像表示を直接使用することができ、いくつかの処理を行うためのMVCの必要性。)
(1)、Winフォームショー
/// <要約> /// ページに単一の画像を表示する /// </要約> 公共 無効ReturnImageShow() { // .....データ収集プロセスが省略されている // バイトストリームに格納されたピクチャゲット バイト [] ImageLogoArray =ロウ[ " 含むFileContentは" ] IS?はDBNull ヌル(:バイト [])(行[ " 含むFileContent " ;]) のMemoryStream MS = NULL ; IF(!ImageLogoArray = NULL ) { MS= 新規のMemoryStream(ImageLogoArray)。 この .picBox.Imageは= 新しいビットマップ(ミリ秒)。 } }
(2)、MVCは(バックグラウンド)に示されています
// GET:写真/インデックス /// <要約> /// データの表示方法(JSフォアグラウンド処理を使用して、レンダリングのimg srcを呼び出す) /// </要約> /// <リターンA> </リターンA> 公共のActionResultインデックス() { 使用(DbContextのDataContext = 新しい新規のDataContext()) { // 提示されるデータの一覧取得 PictureInfoService InfoServiceの= 新しい新しいPictureInfoService(DbContext); VAR USERLIST = dbContext.Set <PictureInfo> (); // 値のリストを渡す<Tを>データ のViewData [ " PicInfo" ] = UserList.ToList(); } 戻りビュー(); } // GET:画像/ IndexAdv /// <要約> /// 表示データ(背景画像ラベルが直接価値法によって直接ページを使用して、コンテンツページにスプライシングレンダリング) /// </要約> /// <戻り値> </戻り値> 公共のActionResult IndexAdv() { 使用して(DbContextのDataContext = 新しい新しいのDataContext()) { // データ取得 PictureInfoService InfoServiceの= 新新(DbContextをPictureInfoServiceを) ; VAR USERLIST = dbContext.Set <PictureInfo>(); // 背景の書式設定テキストが直接読み取る のStringBuilderビルダー= 新しい新しいのStringBuilder(); foreachの(VARデータでUSERLISTを) { // ポイントの割り当てにここでSRC属性バイトストリームバックは、変換方法が必要です builder.AppendFormatを(" <div要素クラス= \ "項目\"> <IMG ID = \ "イメージ{0} \" SRC = \ "../画像/ ReturnPic?ID = {1}&ランダム= Math.random()\" = \「{タイトル} 2 \ "/> </ div> " 、data.id、data.id、data.FileName); } // 背景モザイクページタブ // MVC(非コア)HTML @ Html.Rawを用いて受信を特定する(ViewBag .DataBuilder) = ViewBag.DataBuilder builder.toString(); } 戻りビュー(); } /// <まとめ> /// 戻り画像(バイトストリームのメソッドを処理する背景画像を追加) /// </要約> /// <PARAM名前= "ID"> クエリ(IDインデックス)</ param>の /// <戻り値> </戻り値> 公共 FileStreamResult ReturnPic(int型のID) { 使用して(DbContextのDataContext = 新しい新しいのDataContext()) { // 使用した本単なる例示EF;コンテンツ情報のバイトに対応する主取得画像[] PictureInfoService InfoServiceの= 新しい新PictureInfoService(DbContext); VARデータ= infoService.Find <PictureInfo> (ID); // のMemoryStreamに取得したバイトストリームは、返すため // 前面表示画像におけるMVCのバイトストリームを、特別な処理を必要とします、 // 戻り型はFileStreamResult MemoryStreamをMS = 新しい新規のMemoryStream(data.FileContent)を、 リターン 新しい新しい FileStreamResult(MS、" 画像/ JPEG " ); } }
(3)、MVC番組受信部
IndexAdv.cshtml
Index.cshtml
図6に示すように、一般的な画像変換カプセル化バイトストリーム
using System.Drawing; using System.IO; public class ImgTransHelper { /// <summary> /// 图片转换成字节流 /// </summary> /// <param name="img">要转换的Image对象</param> /// <returns>转换后返回的字节流</returns> public static byte[] ImgToByt(Image img) { MemoryStream ms = new MemoryStream(); byte[] imagedata = null; img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); imagedata = ms.GetBuffer(); return imagedata; } /// <summary> /// 字节流转换成图片 /// </summary> /// <param name="byt">要转换的字节流</param> /// <returns>转换得到的Image对象</returns> public static Image BytToImg(byte[] byt) { MemoryStream ms = new MemoryStream(byt); Image img = Image.FromStream(ms); return img; } /// <summary> /// 根据图片路径返回图片的字节流byte[] /// </summary> /// <param name="imagePath">图片路径</param> /// <returns>返回的字节流</returns> private static byte[] getImageByte(string imagePath) { FileStream files = new FileStream(imagePath, FileMode.Open); byte[] imgByte = new byte[files.Length]; files.Read(imgByte, 0, imgByte.Length); files.Close(); return imgByte; } }
以上为记录内容,如有不足之处,欢迎指正!