質問者
バイナリ画像のIMAGEコントロールへの表示

質問
-
簡単かもしれませんがまた教えて下さい。
ドロップダウンリスト(Ddp)で選択(ファイル名)された画像ファイルをimageコントロールに表示したいのですがどのように書けばよいか分かりません。
テーブル:Aの項目
id ファイル名 type pic
1 1.jpg image/pjpeg バイナリ
2 2.jpg image/pjpeg バイナリ以下コード ↓
Sub Btn_Click(ByVal sender As Object, ByVal e As EventArgs)Dim Rs As SqlDataReader
Dim cn As New SqlConnection("xxxx")
Dim cmd As New SqlCommand()
Dim id As SqlParameter = cmd.Parameters.Add("@id", SqlDbType.Char)
id.Value = Ddp.SelectedItem.Value
cmd.CommandText = "SELECT type,pic FROM A WHERE id=@id"
cmd.Connection = cn
cn.Open()
Dim Rs = cmd.ExecuteReader()
If Rs.Read() Then
← ???
End If
cn.Close()
Image1.ImageUrl = ← ???
End Subよろしくお願いします。
すべての返信
-
まずはっきりさせておかねばならないのが「ブラウザはどのように画像を表示しているのか」です。
ブラウザが受け取った HTML ファイル中に <img src="...." /> というタグがあった場合、ブラウザはその度に画像を取得するように Web サーバにリクエストします。
一回のレスポンスで HTML ファイルと画像ファイルを返せません。という事は、Btn_Click メソッドで行う事は画像を作成して Web サーバに保存し、その Url を image1.ImageUrl に設定する。或いは、image1.ImageUrl に設定した Url のリクエストがされた場合に、動的に画像を作成してそのレスポンスを返す等です。後者の場合は、新しい aspx 等を作って、その中で DB にアクセスして画像を返してください。
-
囚人さんレスありがとうございます。
>HTML ファイル中に <img src="...." /> というタグ
vwdの中にimageは標準とHTMLの2箇所に存在していますがどのような違いがあるのでしょうか?webコントロールとHTMLコントロールという違いしか分かっていません。又、今回のようなことをする為にはどちらが適しているのでしょうか?今は標準を使用しています。
>という事は、Btn_Click メソッドで行う事は画像を作成して Web サーバに保存し、その Url を image1.ImageUrl に設定する。
ここで言われている画像を作成とはテーブル内に保存されている画像バイナリをXX.jpgに変換するということでいいですか?その後XX.jpgをWebサーバのフォルダに保存をしてUrl を image1.ImageUrl に設定する。という理解であってますか?
>或いは、image1.ImageUrl に設定した Url のリクエストがされた場合に、動的に画像を作成してそのレスポンスを返す等です。後者の場合は、新しい aspx 等を作って、その中で DB にアクセスして画像を返してください。
a.aspx(メイン) とb.aspx(サブ)があった場合
1.メインでimage1.ImageUrl=b.aspx?id= ドロップダウンリストで選択された値
2.サブで1.からの値を参照しDBにアクセス
3.2.の結果をa.aspx返す
ということだと思うのですが2.のDBアクセス以降の処理をどのように記述したらいいのか分かりません。
最終的には同一ページ内にグリッドビューとフォームビューを配置しグリッドビューで選択されたレコードに対応する画像をフォームビュー表示したいと思っています。
ご助言宜しくお願いします。
-
vwdの中にimageは標準とHTMLの2箇所に存在していますがどのような違いがあるのでしょうか?webコントロールとHTMLコントロールという違いしか分かっていません。又、今回のようなことをする為にはどちらが適しているのでしょうか?今は標準を使用しています。
いえ、コントロールの話ではなく、ブラウザが最終的に受け取る HTML の話です。
ここで言われている画像を作成とはテーブル内に保存されている画像バイナリをXX.jpgに変換するということでいいですか?その後XX.jpgをWebサーバのフォルダに保存をしてUrl を image1.ImageUrl に設定する。という理解であってますか?
その通りです。ただその方法を採ると生成した画像を削除するべきかどうかという問題もあります。仕様で片付くならそれもありでしょう。
a.aspx(メイン) とb.aspx(サブ)があった場合1.メインでimage1.ImageUrl=b.aspx?id= ドロップダウンリストで選択された値
2.サブで1.からの値を参照しDBにアクセス
3.2.の結果をa.aspx返す
ということだと思うのですが2.のDBアクセス以降の処理をどのように記述したらいいのか分かりません。
最終的には同一ページ内にグリッドビューとフォームビューを配置しグリッドビューで選択されたレコードに対応する画像をフォームビュー表示したいと思っています。
かなり説明しにくいですが、要は b.aspx?id=1 というリクエストがされたとき、b.aspx は id が 1 の画像「のみ」をレスポンスで返すようにすればよいという事です。
以前同じような事を説明したのでご参考に。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33556&forum=7&start=0