はじめに 多くの場合、画像をデータベースに保存する必要があります。一部のアプリケーションでは、ファイル システムに保存できない機密情報が存在します。これは、ファイル システムに保存されている画像はユーザーによって簡単に違法に取得される可能性があるためです。
この記事では、ASP.NET で画像を SQL SERVER データベースに保存する方法について説明します。
この記事では、次の側面について学びます。
l 画像ファイルをアップロードするための要件
l Strem オブジェクトの使用
l アップロードされた画像のサイズと種類を取得する
l InputStream メソッドの使用方法は?
画像ファイルをアップロードするための要件 アップロードを開始する前に、2 つの重要なことを行う必要があります。
#Form タグの enctype 属性は、次の形式に設定する必要があります。
enctype="マルチパート/フォームデータ"
#ユーザーが画像ファイルを選択できるようにする HTML コントロールを提供します。
<入力タイプ=ファイル>
#Strem オブジェクトを処理するには System.IO 名前空間も参照します。上記の 3 つの項目を aspx ページに適用する必要があります。 SQL SERVER には次の要件もあります。
#少なくとも 1 つのフィールド タイプが Image であるテーブル
#さらに、画像タイプを格納するために Varchar タイプのフィールドを使用する方がよいでしょう。次に、画像フィールド タイプと <input type=file> (HTML ファイル コントロール) を含むデータ テーブルを用意します。ユーザーが画像を選択した後にクリックできる送信ボタンも必要です。ボタンの OnClick イベントでは、画像ファイルのコンテンツを取得し、最後にそれをデータ テーブルに挿入する必要があります。画像を読み取ってデータテーブルに挿入する、ボタンの OnClick イベントを見てみましょう。
送信ボタンの OnClick イベントコード
http://blog.downcodes.com/
Dim intImageSize As Int64
文字列としての Dim strImageType
Dim ImageStream As Stream
' 画像のサイズを取得します
intImageSize = PersonImage.PostedFile.ContentLength
' 画像タイプを取得します
strImageType = PersonImage.PostedFile.ContentType
' 画像を読み取ります
ImageStream = PersonImage.PostedFile.InputStream
Dim ImageContent(intImageSize) バイトとして
Dim intStatus As Integer
intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
' 接続とコマンド オブジェクトのインスタンスを作成
myConnection を新しい SqlConnection として薄暗くする(ConfigurationSettings.AppSettings("ConnectionString"))
Dim myCommand As New SqlCommand("sp_person_isp", myConnection)
' コマンドを SPROC としてマークします
myCommand.CommandType = CommandType.StoredProcedure
' SPROC にパラメータを追加
Dim prmPersonImage As New SqlParameter("@personImage", SqlDbType.Image)
prmPersonImage.Value = ImageContent
myCommand.Parameters.Add(prmPersonImage)
Dim prmPersonImageType As New SqlParameter("@PersonImageType", SqlDbType.VarChar, 255)
prmPersonImageType.Value = strImageType
myCommand.Parameters.Add(prmpersonImageType)
試してください
myConnection.Open()
myCommand.ExecuteNonQuery()
myConnection.Close()
Response.Write("新しい人が正常に追加されました!")
SQLexc を SqlException としてキャッチする
Response.Write("挿入に失敗しました。エラーの詳細は次のとおりです: " & SQLexc.ToString())
試行を終了する
どのように機能するのでしょうか?
オブジェクト PersonImage は HTMLInputFile コントロールです。まず、挿入された画像のサイズを取得する必要があります。これは次のメソッドで実現されます。
intImageSize = PersonImage.PostedFile.ContentLength
次に、ContentType プロパティを通じて画像タイプを取得する必要があります。最後で最も重要なことは、画像ファイル ストリームを取得することです。これは次の方法で実現されます。
ImageStream = PersonImage.PostedFile.InputStream
バイト配列 ImageContent があり、画像コンテンツを保存するために使用する準備ができています。画像全体は、Stream オブジェクトの Read メソッドを通じて読み取られます。このメソッドには、次の 3 つのパラメータがあります。
#コピーされた画像コンテンツのターゲットの場所
#読み取り開始位置
#読み取る必要があるサブセクションは次のように宣言されます。
intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
ここで、画像コンテンツ全体を読み取ります。次に、イメージ コンテンツを SQL データ テーブルに挿入する必要があります。ストアド プロシージャを使用して、イメージ タイプとイメージを SQL データ テーブルに挿入します。上記のコード リストをご覧になった方は、データ型を SqlDbType.Image に設定したことがわかります。このようにして、イメージが SQL SERVER データベースに正常に保存されました。