0

EmployeeName を入力して EmployeePhoto をアップロードし、Employee Info を取得して Web サイトに Employeephoto を表示する ASP.NET Web サイトがあります。

EmployeePhoto - type "image" で SQL テーブルを作成しました。

このコードを使用して写真を挿入します (正常に動作します) http://i.stack.imgur.com/qmphk.png

ただし、SQL に挿入した写真を Web サイトにロードしたい場合、この Inputstream does not exist エラーが発生します。

写真コードの読み込みとエラーhttp://i.stack.imgur.com/X2okW.png

httphandler ソリューションを使用したくない

編集:私はまだ正しい答えを持っていません:(

どうもありがとうございました。

            cnn.Open();
            SqlCommand cmd = new SqlCommand("SELECT EmployeeFirstName,EmployeeLastName,EmployeePhoto FROM Employees WHERE EmployeeID = @myvalue", cnn);
            cmd.Parameters.AddWithValue("@myvalue", (ListBox1.SelectedValue));
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    TextBox1.Text = dr.GetString(0);
                    TextBox2.Text = dr.GetString(1);


                    byte[] imagedata = (byte[])dr[2];
                    InputStream.Read(imagedata, 0, (byte[])dr[2]);
                    Image Image1 = Image.FromStream(imagedata);

                }
            }
            cnn.Close();
4

4 に答える 4

2

交換

                byte[] imagedata = (byte[])dr[2];
                InputStream.Read(imagedata, 0, (byte[])dr[2]);
                Image Image1 = Image.FromStream(imagedata);

                byte[] imagedata = (byte[])dr[2];
                Image Image1 = Image.FromStream(new MemoryStream(imagedata));

InputStream使用しているオブジェクトが見つからないため、エラーが発生しているようです。これを回避するには、新しい MemoryStream オブジェクトを作成します。

Image.FromStreamまた、正しく受け入れられないと思われるバイナリ配列を渡しています。

また、オブジェクトを使用しても、 Web コントロールImageとは異なるため、このソリューションではおそらく役に立ちません。Image

詳細については、以下を参照してください。

System.Drawing.Image

System.Web.UI.Controls.Image

于 2013-10-02T15:41:21.053 に答える
1

imgHTML の設計方法では、HTML のタグは外部リソース (タグなど) を参照するため、ある種のハンドラーを使用する必要がありますsrc。長い間、サーバーから返される HTML に画像を含める方法はありませんでした。

そうは言っても、状況は変わり、今では可能です。src画像を base-64 でエンコードし、特別にフォーマットされた属性を使用してマークアップ自体に含めることができます。

<img src="data:<MIMETYPE>;base64,<BASE64_ENCODED_IMAGE>">

すべてのブラウザがこれをサポートしているわけではないので、注意してください。

また、このアプローチの大きな欠点の 1 つは、画像がブラウザーによってキャッシュされないことです。そのため、このページが要求されるたびに、この Base64 値を生成するためにサーバーから余分なオーバーヘッドが発生します。一方、URL がある場合、ブラウザーはURL に基づいて画像をキャッシュでき、リクエストごとにサーバーから画像を取得する必要はありません。

Base64 文字列を取得するには、静的メソッドを使用しますSystem.Convert.ToBase64String(byte[])

于 2013-10-02T16:01:07.563 に答える
-1

私はこれがうまくいくと信じています:

byte[] bitMapData = dr[2] as byte[] ?? null;

        if (bitMapData != null)
        {
            using (MemoryStream stream = new MemoryStream(bitMapData))
            {
                System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(stream);
            }
        }
于 2013-10-02T15:48:01.550 に答える
-1

これは、InputStream というオブジェクトがないためです。

代わりにこれを試してください:

byte[] imagedata = (byte[])dr[2];
Image Image1 = Image.FromStream(new MemoryStream(imagedata));

これbyte[]により、 がメモリ ストリームに入れられ、Image.FromStream(); を使用できるようになります。

于 2013-10-02T15:43:29.930 に答える