Эта папка должна быть внутри вашей виртуальной папки, поэтому вы можете сделать:
<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
в вашем виртуальном каталоге. Это облегчит вам жизнь.
Иногда невозможно переместить папку. Поэтому я также обновил приведенный выше код для работы с неканоническими именами файлов.