Как сделать файл изображения, который хранится НЕ в домашней папке веб-приложения? - PullRequest
0 голосов
/ 14 марта 2011

Представьте, что есть веб-приложение (mvc), домашний каталог которого на сервере установлен по умолчанию c:\intepub\wwwroot.Что мне нужно:

  1. запросы пользователей http://server/randomPicture
  2. Сервер отвечает простой страницей со случайным изображением на нем по заранее заданному пути, который не iis folder / app, например d:\lolcats\

Этот пример, конечно, значительно упрощен.Мое решение: когда запрашивается /randomPicture/, скопируйте случайное изображение в APP_Images/current_response.jpg или что-то еще в домашнюю папку приложения, а затем просто просмотрите

<img src="../APP_Images/current_response.jpg" />

Это единственное решение или есть более цивилизованный способ сделатьэто?

Ответы [ 2 ]

3 голосов
/ 14 марта 2011

Есть много способов сделать это, но самый простой - наименее вызывающий: просто создайте виртуальную папку для расположения образа в IIS.

1 голос
/ 14 марта 2011

Вы можете использовать обработчик HTTP следующим образом:

    public class GetImage : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        DateTime now = DateTime.Now;
        context.Response.Cache.SetExpires(now.AddYears(1));
        context.Response.Cache.SetCacheability(HttpCacheability.Public);
        context.Response.Cache.SetValidUntilExpires(true);
        context.Response.Cache.SetLastModified(now);
        context.Response.Cache.VaryByParams["FileID"] = true;
        context.Response.Cache.SetOmitVaryStar(true);

        context.Response.ContentType = file.ContentType;
        context.Response.AppendHeader("content-length", file.ContentLength.ToString());

        //TODO: Get your file here
        string contentDisposition = String.Empty;
        contentDisposition += "filename=" + file.OriginalFilename;

        context.Response.AppendHeader("content-disposition", contentDisposition);
        string imagePath = Path.Combine(HostingEnvironment.MapPath(Settings.Default.MediaPath), file.LocalFilename);
        context.Response.WriteFile(imagePath);
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

и используйте его так:

<img src="/Handlers/GetImage.ashx?FileID=' + thumbnailFileID + '" alt="" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...