DiskCache плагин imageresizer в MVC3 - PullRequest
       25

DiskCache плагин imageresizer в MVC3

1 голос
/ 27 февраля 2012

Для моего проекта MVC (приложения сервера изображений) я не могу выполнять кэширование с использованием imageresizer. Я могу получить доступ к своим изображениям, как это, и источником изображения может быть либо FileSystem / Database (Dependency injeciton):

localhost / images / 123.jpg? Width = 500
локальный / изображения / 123? ширина = 500

У меня есть проект MVC 3 с маршрутами типа

        routes.RouteExistingFiles = true;
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("favicon.ico");

        routes.MapRoute(
            "ImagesWithExtension", // Route name
            "images/{imageName}.{extension}/", // URL with parameters
            new { controller = "Home", action = "ViewImageWithExtension", imageName = "", extension = "", id = UrlParameter.Optional } // Parameter defaults
        );

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

У меня есть два контроллера для работы с изображениями public ActionResult ViewImageWithExtension (строка imageName, расширение строки) {} public ActionResult ViewImage (string imageName) {}

Кэширование выполняется, когда URL выглядит следующим образом: localhost / images / 123.jpg? width = 500 и источником изображения является FileSystem
localhost / images / 123? width = 500 Кэш не работает Источник изображения - Файловая система
localhost / images / 123.jpg? width = 500 Кэш-память не работает, источник изображения DB
localhost / images / 123? width = 500 Кэш не работает, исходная база данных

Мой веб-конфиг выглядит так:

<configSections>
    <section name="resizer" type="ImageResizer.ResizerSection" />   </configSections>


<resizer>
    <!-- Unless you (a) use Integrated mode, or (b) map all reqeusts to ASP.NET, 
         you'll need to add .ashx to your image URLs: image.jpg.ashx?width=200&height=20 
         Optional - this is the default setting -->
    <diagnostics enableFor="AllHosts" />
    <pipeline fakeExtensions=".ashx" />
    <DiskCache dir="~/MyCachedImages" autoClean="false" hashModifiedDate="true" enabled="true" subfolders="32" cacheAccessTimeout="15000" asyncWrites="true" asyncBufferSize="10485760" />
    <cleanupStrategy startupDelay="00:05" minDelay="00:00:20" maxDelay="00:05" optimalWorkSegmentLength="00:00:04" targetItemsPerFolder="400" maximumItemsPerFolder="1000" avoidRemovalIfCreatedWithin="24:00" avoidRemovalIfUsedWithin="4.00:00" prohibitRemovalIfUsedWithin="00:05" prohibitRemovalIfCreatedWithin="00:10" />
    <plugins>
      <add name="DiskCache" />
    </plugins>   </resizer>

Я что-то не так делаю или Imageresizer не поддерживает этот сценарий? Если нет хорошего плагина для использования образа диска cahce?

Заранее спасибо.

1 Ответ

3 голосов
/ 26 марта 2012

Как я объяснил на других открытых форумах, где вы одновременно публиковали этот вопрос, ImageResizer поддерживает внедрение зависимостей с нуля. Вы пытаетесь обернуть внедрение зависимостей большим количеством внедрения зависимостей, но в обратном направлении.

A) ASP.NET MVC 3 и 4 препятствуют эффективному кешированию диска, по проекту . Вам нужно работать с модулем ImageResizer Http, а не против него, чтобы получить хорошую производительность. Это означает использование API URL, а не управляемого API, обернутого вашими MVC ActionResults. Послушайте мой подкаст со Скоттом Хансельманом для получения дополнительной информации.

B) SqlReader, S3Reader, MongoReader, VirtualFolder и AzureReader поддерживают динамическое внедрение и могут (с небольшим количеством конфигурации) использовать один и тот же синтаксис пути. ImageResizer предназначен для простой миграции между хранилищами данных.

C) Вы можете использовать событие Config.Current.Pipeline.Rewrite, чтобы заставить URL API использовать любой синтаксис, который вы хотите. Это гораздо более гибко, чем маршруты MVC (и менее глючит).

D) Если вы хотите добавить еще один уровень внедрения зависимостей, внедрите IPlugin, и динамически выберите соответствующее хранилище данных и настройте его с помощью метода Install.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...