我的.aspx页面上有一个Image控件,我想将ImageUrl设置为这样:
<asp:Image ID="imgLogo" ImageUrl="C:\ExternalImages\logo.jpg" runat="server" />
但这不起作用。我读了MSDN上的ImageUrl属性,它说url可以是绝对路径或相对路径。但是我如何设置如上所示的完整路径?
答案 0 :(得分:5)
“绝对”表示从客户的角度来看是绝对的,如http://foo.com/images/logo.jpg
或/images/logo.jpg
。区别在于完全限定的域名或前导“/”,它告诉浏览器从根目录或域级加载该路径。
“相对”表示没有前导斜杠,并告诉浏览器使用当前文件夹作为起点导航到路径。所以../images/logo.jpg
是一个相对路径,意思是“相对于当前文件夹,向上移动一个文件夹,然后向下移动到images文件夹,然后是logo.jpg”
您显示的示例指示最终用户的浏览器从他们自己的计算机加载该路径,在大多数情况下,由于他们没有该路径或文件,因此无法工作:)
答案 1 :(得分:0)
ImageUrl不是计算机的路径,而是Url路径:http://www.something.com/logo.jpg“或”/logo.jpg“
答案 2 :(得分:0)
您也可以从磁盘中获取图像,但是您必须添加:file://
但不会在您正在开发的任何其他计算机上运行 -
答案 3 :(得分:0)
通过绝对URL,它们表示URL的整个IIS路径(不是您的磁盘目录路径)。 (即http://yourVirtualDirectory/ExternalImages/logo.jpg)。
在IIS主机上创建一个指向C:\ ExternalImages的虚拟目录。在控件中使用该虚拟目录路径。
答案 4 :(得分:0)
绝对和相对URL引用服务器上的关系。
ex:http://mydomain.se/mysite/images/image.gif是绝对路径 /images/image.gif是一个相对路径。 您的页面位于服务器上的Mysite目录中的相对方式。
使用相对路径的原因是它可以更容易地移动网站, 使用绝对路径的原因是您可以将“myimage.html”移动到子目录而不会破坏URL。
答案 5 :(得分:0)
绝对意味着在项目中绝对,相对意味着相对于当前位置,例如../../Images/logo.jpg
。您最好使用绝对值以获得最大的灵活性,例如~Images\logo.jpg
。在运行时,波形符~
会自动替换为正确的相对路径。
答案 6 :(得分:-1)
该文件夹必须位于您的虚拟文件夹中,因此您可以执行以下操作:
<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
放入虚拟目录。那会让你的生活更轻松。
有时无法移动文件夹。所以我还更新了上面的代码来处理非规范文件名。