2009-10-05 15 views
17

画像URLプロパティをApp_Dataフォルダにあるasp画像コントロールに設定すると、画像はページデザインビューで表示されますがブラウザでは表示されません。App_Dataフォルダにある画像はブラウザに表示されません

<form id="form1" runat="server"> 
<div> 
    <asp:Image ID="Image1" runat="server" ImageUrl="~/App_Data/p3.jpg" /> 
</div> 
</form> 

これは簡単なようですが、画像は表示されません。

答えて

38

App_Dataフォルダは、データベースファイルなどのデータ用に予約された特別なフォルダであり、ではなく、はウェブ上のコンテンツをレンダリングします。これは意図的なもので意図的なものであり、変更することはできません(私が知る限り)。

あなたの画像はApp_Dataサブフォルダに属していません - /imagesフォルダなどに入れてください。

8

画像はApp_Dataフォルダに保存しないでください。これは、.mdbデータベースファイルなど、ユーザーに直接提供されることのないファイルに予約されています。

/Resourcesまたは/Resources/Imagesフォルダーをサイトのルートから作成します。

+0

ありがとうChris ... –

+0

こんにちは、しかし、問題は私が '/ Resources/Images'フォルダをルートに作成しようとするとアクセスが拒否されるということです(IISでホストされているサイト).WHatはIISユーザーアカウントw./oのルートにディレクトリを作成して、ルートディレクトリ全体に対してユーザーアカウントのアクセス許可を与える最善の方法は?それは可能ですか?ルート内にディレクトリを作成しようとするとアクセス拒否エラーが発生します。 。 – Sagar

3

いいえ、できない時間... app_dataフォルダから画像を直接読み込むことはできませんが、app_dataフォルダから画像ファイルを読み込んでクライアントに返す独自のhttpハンドラを作成できます。回避策はありますが、一般に、データはアプリケーションだけが読むことができるデータを対象としています。ハンドラにデータを読み込ませることで、それらの画像を返すことができます。

しかし、あなたが私のために働いていたら、すぐに解雇されるのは悪い習慣です!

+2

イメージがapp_dataから提供されるようにasp.netを迂回する方法を考えても、悪い考えです... –

+0

アイデアを共有してくれてありがとう。 –

+2

@Chris、私は同意します!私は自分自身を発射する! ;-) –

4

私は同意しません。 App_Dataフォルダに画像を隠し、独自のhttpハンドラを作成すると画像を保護し、表示する前に著作権テキストなどを画像に追加することができます。

私が高画質の写真を持っているときに私はこれを行います。誰も手を出すことができず、httpハンドラにイメージをダウンスケールさせ、いくつかのcopyrighttextを付けます。すばらしいです!

0

App_Dataフォルダのコンテンツは配信できますが、直接配信することはできません。
直接アクセスはできず、間接はお勧めしません。意図的です。

ただし、仮想パスを追加するとこれを行うことができます。 これを参照してくださいquestion


私はトップ3の答えがあなたの目的に役立つと思います。
グローバルフォルダまたはローカルフォルダのイメージをリソースフォルダに保存します。これらは特別なフォルダでもあり、コンテンツにはプログラム的にアクセスできます。

0

;)

App_Dataに画像を保存する理由があります。ユーザーがファイルやロゴをアップロードできる状況では、これらのファイルを保護し、他のユーザーがアクセスできるようにしたり公開したりすることはありません。

これは、サーバー/デプロイメントインスタンスごとに異なるファイルを持つ唯一の方法です。

アプリをデプロイするときに、デプロイメント設定の「App_Dataからファイルを除外する」を有効にすることで、サーバーインスタンスごとにアップロードされたこれらのファイルを保護することができます。

urlでこれらのファイルにアクセスするには、ダウンロードハンドラdownloadoft.ashxを使用します。

これが役に立ちます。

関連する問題