Настройка Absolute ImageUrl - PullRequest
       8

Настройка Absolute ImageUrl

0 голосов
/ 08 февраля 2010

У меня есть элемент управления Image на моей странице .aspx, и я хочу установить ImageUrl что-то вроде этого:

<asp:Image ID="imgLogo" ImageUrl="C:\ExternalImages\logo.jpg" runat="server" />

Но это не работает. Я читал о свойстве ImageUrl в MSDN, и там говорится, что URL может иметь как абсолютный, так и относительный путь. Но как я могу установить полный путь, как показано выше?

Ответы [ 7 ]

5 голосов
/ 08 февраля 2010

«Абсолют» означает абсолют с точки зрения клиента, как в http://foo.com/images/logo.jpg или /images/logo.jpg. Разница заключается либо в полностью определенном доменном имени, либо в начале "/", которое указывает браузеру загружать этот путь из корня, или на уровне домена.

«Относительный» означает отсутствие начального слеша и указывает браузеру перейти к пути, используя текущую папку в качестве начальной точки. Таким образом, ../images/logo.jpg - это относительный путь, означающий «относительно текущей папки, переместитесь вверх на одну папку, затем вниз в папку изображений, затем logo.jpg»

В приведенном вами примере браузер конечного пользователя загружает этот путь со своего компьютера, что в большинстве случаев не работает, поскольку у него нет этого пути или файла:)

0 голосов
/ 08 февраля 2010

Абсолютный означает Абсолютный изнутри вашего проекта, относительный означает относительный относительно текущей позиции, например, ../../Images/logo.jpg.Лучше всего использовать абсолют для максимальной гибкости, например ~Images\logo.jpg.Тильда ~ автоматически заменяется на правильный относительный путь во время выполнения.

0 голосов
/ 08 февраля 2010

Абсолютный и относительный URL относится к отношению на сервере.

ex: http://mydomain.se/mysite/images/image.gif - абсолютный путь /images/image.gif - это относительный путь. Относительно того, как ваша страница находится в каталоге Mysite на сервере.

Причина использования относительных путей заключается в том, что это облегчает перемещение сайта, Причиной использования абсолютного пути является то, что вы можете переместить «myimage.html» в подкаталог, не нарушая URL.

0 голосов
/ 08 февраля 2010

Под абсолютным URL-адресом они подразумевают полный путь IIS к URL-адресу (не путь к каталогу на диске) (т.е. http://yourVirtualDirectory/ExternalImages/logo.jpg).

Создайте виртуальный каталог на хост-компьютере IIS, который указывает на C: \ ExternalImages. Используйте этот путь виртуального каталога в вашем контроле.

0 голосов
/ 08 февраля 2010

Вы также можете получить образ с диска, но вы должны добавить: file://, но он не будет работать ни на каком другом компьютере, кроме того, на котором вы работали -

0 голосов
/ 08 февраля 2010

Эта папка должна быть внутри вашей виртуальной папки, поэтому вы можете сделать:

<asp:image imageurl = "/ExternalImages/logo.jpg" runat="server">

Другой вариант - создать страницу, которая может читать этот файл, чтобы вы могли написать:

<asp:image imageurl = "MyImage.aspx?name=logo.jpg" runat="server">

И ваш MyImage.aspx.cs будет выглядеть так:

protected void Page_Load(object sender, EventArgs e)
{
    string basePath = @"c:\ExternalFolder";
    string combined = Path.Combine(basePath, Request.QueryString["name"]);
    if(!basePath.Equals(Path.GetPathRoot(combined), 
        StringComparison.InvariantCultureIgnoreCase))
        throw new System.Security.SecurityException();

    using (FileStream image = new FileStream(combined, FileMode.Open))
    {
        int length = (int)image.Length;
        byte[] buffer = new byte[length];
        image.Read(buffer, 0, length);

        Response.BinaryWrite(buffer);
    }
}

Но учтите, что код может привести к проблемам с внедрением, поскольку вы можете передать ".. \" в параметр name и получить доступ к файлам вне этой папки.

Итак, поместите эту папку в ваш виртуальный каталог.

РЕДАКТИРОВАТЬ : Чтобы прояснить : я предлагаю разместить ваш ExternalFolder в вашем виртуальном каталоге. Это облегчит вам жизнь.

Иногда невозможно переместить папку. Поэтому я также обновил приведенный выше код для работы с неканоническими именами файлов.

0 голосов
/ 08 февраля 2010

ImageUrl - это не путь компьютера, а путь URL: http://www.something.com/logo.jpg" или "/logo.jpg"

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