0

次の関数を使用して、asp.net mvc に byte[] 配列イメージを表示しています

        public ActionResult Images(int id)
        {
            byte[] imageData = GetImage(id);

            string contentType = "image/jpeg";

            return File(imageData, contentType);
        }

        <img src="/Home/Images/2">

問題は、これを表示したくないことです/Home/Images/2。このような画像形式でランダムな名前を表示したい

        > /Home/Images/imgnameetc.jpg

注:私は画像をバイト[]配列形式だけで持っています。名前、画像形式などの他の情報はありません

私はそれを検索しましたが、解決策が見つかりません

助けてください。

4

3 に答える 3

1

サーバー側のコードは、ユーザーが移動した URL を偽装できません。に移動した場合は/Home/Images/2、それが URLです。できることは、/Home/Images/imgnameetc.jpg の代わりに ナビゲートする/Home/Images/2ことですが、ID の代わりに名前を許可するようにルートを構成し、ID の代わりに名前 (/slug) から詳細を検索できる場所を用意する必要があります。 . たとえば、UrlSlugデータベースにインデックスが作成された列がある場合があります (null 以外の値に制限された、一意でクラスター化されていないことをお勧めします。追加の値として ID を含めます (インデックスの一部ではありませんが、そのレコードを含む slug => id クエリで使用できるため、簡単なテストimgnameetc.jpgで見つけることができます。where

もう 1 つできることは、content-dispositionヘッダーを設定することです。これは、ファイルがそれ自体をどのように識別するかをブラウザーに伝えます。たとえば、"content-disposition"ヘッダーをに設定すると、ユーザーがファイルを保存しようとした"inline;filename=imgnameetc.jpg" 場合に役立ちます。ただし、ブラウザに表示される URL は変更されません。

于 2013-03-13T12:01:12.210 に答える
0

次の URL を見てください。これは、MVC ルーターの助けを借りて実現できます。要求に固有のルーターを 1 つ追加し、IIS を構成するだけです。

名前とフォーマット付きの画像

于 2013-03-13T12:18:37.753 に答える
0

ルート テーブルは、URL でイメージの名前を受け入れるように構成する必要があります。また、画像を保存する場所には、名前も一緒に保存できます。データベースの場合は別の列。

Global.asax の register routes メソッドに、これを書いてみてください。

  routes.MapRoute(
          "ImageRoute", // Route name
          "{controller}/{action}/{imageName}", // URL with parameters
          new { controller = "Home", action = "Images", imageName = UrlParameter.Optional       });

EX url = localhost/Home/Images/image1.jpg.

于 2013-03-13T12:10:46.550 に答える