【问题标题】:Why can't the attribute imageurl in the image tag not accept an absolute path?为什么图片标签中的属性imageurl不能接受绝对路径?
【发布时间】:2011-06-26 19:01:47
【问题描述】:

我正在使用两个图像标签。一种是使用的路径是相对的,另一种是绝对的。绝对路径图像未显示。代码如下:

Expt_Image2.aspx 页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Expt_Image2.aspx.cs" Inherits="Expt_Image2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Image
                ID="Image1"
                runat="server"
                ImageUrl="~/Image/Bluehills.jpg"
                Height="100"
                Width="100"/>
            <asp:Image
                ID="Image2"
                runat="server"
                ImageUrl="C:\Documents and Settings\Lovey\My Documents\Visual Studio 2008\WebSites\Expt-New\Image\Sunset.jpg"
                Height="100"
                Width="100"/>
        </div>
        </form>
    </body>
</html>

Expt_Image2.aspx.cs:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
public partial class Expt_Image2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string[] files = Directory.GetFiles(MapPath("~/Image/"));
        Image im = new Image();
        im.ImageUrl = files[1];
        im.AlternateText = files[1];
        form1.Controls.Add(im);
    }
}

【问题讨论】:

  • 如果您检查呈现的 HTML,它期望图像位于何处?这实际上是图像所在的位置吗?
  • 嗨,重点是安全性,如果允许任何 web 应用程序访问除允许目录之外的系统目录 [应用程序运行的文件夹称为 root ~],那么任何代码都可以删除服务器上的任何文件、文件夹和您知道您的服务器上将托管多个网站,并且服务器系统配置不允许您访问 ~ 及其子文件夹之外的任何内容。

标签: asp.net relative-path absolute-path imageurl


【解决方案1】:

在您的Page_Load 方法中,您获取图像并将其存储在数组中的第一个错误。在 C# 中,数组中项的索引从 0 开始,而不是从 1 开始。

其次,必须指定Image控件的属性ImageUrl的虚拟路径。

正确的是Page_Load方法:

protected void Page_Load(object sender, EventArgs e)
{
    string[] files = Directory.GetFiles( MapPath( "~/Image/" ) );
    Image im = new Image();
    im.ImageUrl = "~/Image/" + Path.GetFileName( files[ 0 ] );
    im.AlternateText = files[ 0 ];
    im.Height = 100;
    im.Width = 100;
    form1.Controls.Add( im );
}

【讨论】:

  • 首先您从Image 目录中获取所有图像文件。然后为目录中的第一个图像创建一个Image 控件,并为其设置第一个图像的路径。当您使用来自System.IO 命名空间的类时,您必须为它们提供真实路径,例如C:\MySite\MyFolder\MyImage.jpg。但是对于 ASP.NET 服务器控件,您必须使用像 ~/MyFolder/MyImage.jpg 这样的虚拟路径。
【解决方案2】:

MapPath 不返回文件的物理位置。在您的情况下,例如 C:\inetpub\wwwroot\mysite\image

而您想要虚拟路径,例如。 http://mysite/image/image1.png

这样的事情应该可以工作:

    DirectoryInfo di = new DirectoryInfo(MapPath("~/Image/"));
    FileInfo[] files = di.GetFiles();        

    Image im = new Image();
    im.ImageUrl = "~/Image/" + files[0].Name;
    im.AlternateText = "~/Image/" + files[0].Name;
    form1.Controls.Add(im);

【讨论】:

    【解决方案3】:

    使用应用程序路径,

    Request.ApplicationPath + "~/Image/"
    

    这将解决问题。

    还有一件事。路径前不需要加“~”。

    【讨论】:

      猜你喜欢
      • 2020-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 2019-12-10
      • 2021-04-26
      相关资源
      最近更新 更多