该文件夹必须在您的虚拟文件夹中,因此您可以这样做:
<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 放在您的虚拟目录中。这会让你的生活更轻松。
有时无法移动文件夹。所以我也更新了上面的代码来处理非规范的文件名。