Написать изображение на страницу с другим именем - PullRequest
1 голос
/ 31 августа 2011

Я пытаюсь реализовать простую систему кодирования и хочу вывести изображение без использования его исходного имени.

Например, я хотел бы вывести файл изображения 8.gif на страницу с именем captcha1.gif

Я прочитал различные посты, но я ищу простейшее решение.

Вот что у меня есть ...

<% Html.RenderAction("OuputCaptchaImage", "Home", new { imageName = "1" }); %>

public ActionResult OuputCaptchaImage(string imageName)
{
    var dir = Server.MapPath("images/");
    var path = Path.Combine(dir, imageName + ".gif"); // Like to change name here
    return base.File(path, "image/gif");
}

и что я хотел бы сделать на странице

<img src="image/captcha1.gif" />

1 Ответ

1 голос
/ 31 августа 2011

Следующая разметка выведет изображение правильно. Однако у вас все еще есть проблема с именем файла, на которое ссылаются в URL.

<img src="<%= Url.Action("OuputCaptchaImage", "Home", new { imageName = "1" })%>" />

Что бы вывести следующий HTML:

<img src="/Home/OuputCaptchaImage?imageName=1" />  

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

Однако (AFAIK) для вывода изображения с несуществующим именем файла потребуется обработчик Http, чтобы перехватить запрос и записать требуемое изображение в поток ответа.


Редактировать

Вот пример использования HttpHandler для перехвата входящего запроса на «captcha1.gif» и потоковой передачи другого изображения в ответ:

Разметка

<img src="Images/captcha1.gif" />

HttpHandler

public class OuputCaptchaImageHandler : IHttpHandler
{
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

    public void ProcessRequest(HttpContext context)
    {
        string imagePath =
                context.Server.MapPath(@"~\Images\1.gif");
        Bitmap bitmap = new Bitmap(imagePath);

        context.Response.ContentType = "image/gif";
        bitmap.Save(context.Response.OutputStream, ImageFormat.Gif);

        bitmap.Dispose();              
    }
}

Web.Config

  <httpHandlers>
    <add verb="*" path="Images/captcha1.gif" type="FullyQualifiedNameSpace.OuputCaptchaImageHandler, RootNamespace" validate="false"></add>     
  </httpHandlers>

Global.asax.cs

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("Images/captcha1.gif/{*pathInfo}");

    ....

Надеюсь, это поможет.

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