4

FileUploadコントローラーを使用して、データベースのテーブル内に画像を挿入することについて、非常に多くの優れたチュートリアルがあります。

しかし、これらの画像を取得して表示する方法についての良いチュートリアルを見つけることができません。

以前は画像の名前やパスを(Varcharとして)データベースに保存していたのですが、次のようにすると非常に簡単になります...

HTML / ASP:

<img src="" runat="server" id="myImage" />

C#:

myImage.Src = myReader.getValue(0).toString();

結果:

<img src="/Images/pic.png" runat="server" id="myImage" />

そして出来上がり、写真が表示されます。

しかし、ここで、パスではなくアップロードされた画像をフェッチしたいのですが、これはテーブル列のタイプがIMAGEであることを意味します。

一部のチュートリアルでは、最終的にフルスクリーンで画像を表示することになります。

私はそれを望んでいません。前の例で表示されたのと同じ方法で、指定されたサイズとWebページ内の場所で画像をフェッチして表示したいだけです。

なぜデータベースに画像をアップロードするのですか?これらの画像は公開写真ではなく「プロフィール写真」であるため、ゲストが/ Images /を参照して、公開および非公開のWebサイトのすべての写真を検索することは望ましくありません。

4

3 に答える 3

2

まず、必要な操作を行うために、ファイルを一時的な場所にコピーし、その場所を「src」属性に使用します。後で、ファイルを削除できます。さらに複雑な方法は、画像をバイナリストリームとしてWebページに書き込むaspxページを作成することです。このページはデータベースから画像を取得し、応答にストリームを書き出すだけです。次に、このaspxページを画像のsrc属性で使用します。ただし、画像パスをデータベースに保存し、実際のファイルをファイルシステムに保存しても、フォルダが参照可能またはパブリックである必要があるという意味ではありません。たとえば、ディレクトリブラウジングをオフにすることができます。

于 2012-12-25T23:53:32.307 に答える
1

IHttpHandlerデータベースから画像を提供できるカスタム実装を作成します。たとえば、バイトをストリームに取得し、そのストリームを Web 応答の出力にコピーできます。

簡単な例を次に示します。

public class MyImageHandler : IHttpHandler
{
    public bool IsReusable { get { return true; } }

    public void ProcessRequest(HttpContext ctx)
    {
        Stream yourStream = ...; // This is where you get your data from your database
        ctx.Response.ContentType = "image/jpeg";
        yourStream.CopyTo(ctx.Response.OutputStream);
    }
}

次に、必要な URL に応答するように構成する必要があります。

  • これを行うには、Web.config ファイルを使用できます。
  • または、.ashxファイルを作成して、独自の HTTP ハンドラーを指すようにします。

それについて質問がある場合は、コメントを書いてください。

于 2012-12-26T00:39:22.313 に答える
-1

データベースから画像を読み取り、生のバイトを返すaspxページが必要になります。

これを行う方法の簡単なスケッチは次のとおりです。

byte[] data = (byte[])myReader.getValue(0);

Response.ContentType = "image/jpeg"; //or whatever your used image type is
Response.OutputStream.Write(data, 0, data.Length);
Response.End();

別の方法は、このためのカスタムHttpHandlerを実装することです。

imgもう1つの部分は、画像IDを指定するパラメーターを使用して、タグからこのページを「呼び出す」ことです。

myImage.Src = "/image.aspx?id=" + myReader.getValue(0).toString();
于 2012-12-25T23:56:54.220 に答える