web-dev-qa-db-ja.com

コンテンツフォルダ内のファイルへのパス(ASP.NET MVC)

ASP.NET MVCでContentフォルダーがどのように機能するかについて、まだ理解していないことがあります。物事を明確にするために、いくつか質問があります。

  1. Contentフォルダーはルートフォルダーですか? http:// localhost / はコンテンツを指しているのですか、それとも別のものですか?
  2. Content/images/tempフォルダー内にdummyIcon.pngという名前のファイルがあります。ドメインレイヤー(コードライブラリプロジェクト)からそれを見つけるにはどうすればよいですか?
  3. ASP.NET MVCで画像を表示するベストプラクティスは何ですか?データベースへの画像へのパスを保存する必要がありますか(個人的に好み)、またはバイト配列を保存してビューに返しますか?

次のリンクは、MVC Webアプリケーションのコンテキスト内で役立つことがわかりましたが、上記の質問に対するいくつかの回答に感謝します。ありがとうございました。

ASP.NET MVCコントローラーは画像を返すことができますか?

ASP.NET MVCによるビューとコントローラーを使用して画像を表示する方法

22
Kassem

1.Contentフォルダーはルートフォルダーですか? http:// localhost / はコンテンツを指しているのですか、それとも別のものですか?

いいえ、 http:// localhost:port / はコンテンツフォルダーを指していません。 http:// localhost:port/content / ...を介してコンテンツフォルダー内のファイルにアクセスできます。

2.Content/images/tempフォルダー内にdummyIcon.pngという名前のファイルがあります。ドメインレイヤー(コードライブラリプロジェクト)からそれを見つけるにはどうすればよいですか?

http:// localhost:port/Content/images/temp/dummyIcon.png としてアクセスできるはずです。

3.ASP.NET MVCで画像を表示するベストプラクティスは何ですか?データベースへの画像へのパスを保存する必要がありますか(個人的に好み)、またはバイト配列を保存してビューに返しますか?

画像の保存場所は、アプリケーションのニーズによって異なります。これらの汎用イメージは、アプリケーションイメージ(アイコン、会社のロゴなど)の表示に使用されます。その後、ファイルシステムに保存するのが最適です。

アプリケーションが画像を処理し、画像の保存や操作などに取り組んでいる場合は、DBが必要になる場合があります。 Webアプリケーションで使用される画像を保存するのはオーバーヘッドだと思います。

11
Abdel Raoof
  1. ルートで無視される場合、ルート内のすべてのものはルートを指します。

    あなたがあなたのプロジェクトのルートに画像を置いている場合。次に、_http:://localhost/dummy.ico"_で404が返され、コントローラーが見つからないとします。 Until_global.asax.cs_でこれを行います:

    _routes.IgnoreRoute("dummy.ico");
    //you could add wildcards here to match different things
    _
  2. 使用する場合、コードからFile.Open();と言う場合、ファイルへの物理パスが必要です。次のようになります。

    _string filePath = Server.MapPath(Url.Content("~/Content/Images/Image.jpg"));
    _
  3. ここであなた次第ですが、すべてを1か所にまとめたい場合は、データベースにファイルを配置するのが理にかなっています。アプリを移動する必要がある場合は、データベースを移動するだけです。

ファイルパスに関しては、重複したファイル名を望まないことを覚えておいてください。したがって、各ファイルに GUID を指定し、リンクする必要があります。多数のファイル(または大きなファイル自体)がある場合に意味があるので、データベースが狂ったように成長することはありません。

HTH

39
gideon

コントローラーが返すモデルオブジェクトを作成する必要があります。この例では、作成したクラスであるSearchPageModelを返しています。しかし、このオブジェクトにimageURLというプロパティがあるとしましょう

ただし、コントローラーが実際にActionResultを返すことを確認してください

たとえば...

    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult Search()
    {
        SearchPageModel Model = new SearchPageModel();

        // populate the Model properties
        Model.ImageURL = "myjpeg"

        return View("Search", Model);
    }

次に、このモデルオブジェクトを目的のビューに渡します。この場合、「検索」ビュー

画像を表示するには、追加するビューに..

<img src="Images/<%=Model.ImageURL %>.jpg" />
0
JGilmartin