在Web应用程序中显示图像

时间:2016-01-15 13:41:10

标签: c# .net image

我在网络应用中显示图片时遇到问题。它从数据库拍了照片,应该在网络应用程序中显示。

  protected void btnShowPhoto_Click(object sender, EventArgs e)
    {
        string adresURL = @"~/Content";
        string camPath = "";
        string[] tab = new string[10];

        CheckBox[] _boxes = new CheckBox[] { this.CheckBox1, this.CheckBox2, this.CheckBox3, this.CheckBox4, this.CheckBox5, this.CheckBox6, this.CheckBox7, this.CheckBox8 };
        System.Web.UI.WebControls.Image[] _images = new System.Web.UI.WebControls.Image[] { this.Image1, this.Image2, this.Image3, this.Image4, this.Image5, this.Image6, this.Image7, this.Image8 };
        Label[] _labels = new Label[] { this.lblCameraName1, this.lblCameraName2, this.lblCameraName3, this.lblCameraName4, this.lblCameraName5, this.lblCameraName6, this.lblCameraName7, this.lblCameraName8 };
        System.Web.UI.HtmlControls.HtmlAnchor[] _linkscontrol = new System.Web.UI.HtmlControls.HtmlAnchor[] { this.imagelink1, this.imagelink2, this.imagelink3, this.imagelink4, this.imagelink5, this.imagelink6, this.imagelink7, this.imagelink8 };

        for (int i = 0; i < 8; i++)
        {
            _images[i].Visible = false;
            _labels[i].Visible = false;
            _linkscontrol[i].HRef = "";
        }

        for (int i = 0; i < 8; i++)
        {
            if (_boxes[i].Checked)
            {
                camPath = null;
                tab = null;

                camPath = this.GridView2.Rows[i].Cells[0].Text;


                tab = camPath.Split(new string[] { "StoredPhotos" }, StringSplitOptions.None);


                //Virtual Path'a
                camPath = adresURL + tab[1].Replace(@"\", "/");

                _labels[i].Visible = true;
                _labels[i].Text = this.GridView2.Rows[i].Cells[1].Text;

                _linkscontrol[i].HRef = camPath;

               _images[i].ImageUrl = camPath;
               _images[i].Visible = true;


            }
            else
            _images[i].Visible = false;

        }


    }

我的虚拟路径可能有问题。 CamPath(虚拟路径)变为:E:\ Photo \ StoredPhotos \ 20151010 \ 000003819619_201512021335_1_C1,最后看起来:〜/ 20151010 / 000003819619_201512021335_1_C1

screenshot

2 个答案:

答案 0 :(得分:1)

此路径对网络浏览器毫无意义:

~/20151010/000003819619_201512021335_1_C1

它不知道如何处理~目录。这是服务器端概念,而不是客户端概念。因此,您的服务器端代码需要将其解析为实际路径。

它可以像从服务器的根目录明确地开始一样简单:

string adresURL = @"/Content";

因此,生成的网址将以/Content/.....开头,浏览器会检查该路径中的图片。

但是如果应用程序不是(或可能不是)服务器域的根目录,那么您需要手动设置该帐户或使用某种服务器端帮助程序。有a variety of ways可以解决这个问题,例如:

_images[i].ImageUrl = System.Web.VirtualPathUtility.ToAbsolute(camPath);

答案 1 :(得分:0)

浏览器希望通过http协议访问图像,如果你想以2种不同的方式查看图像:

  1. (简单)在iis下创建一个虚拟目录,指向一个物理文件夹E:\ Photo \ StoredPhotos \并调用StoredPhotos,在_images [i] .ImageUrl中你可以设置值/StoredPhotos/20151010/000003819619_201512021335_1_C1.jpg < / LI>
  2. (complex)构建一个读取磁盘上文件并将其写入响应的类(使用IHttpHandler接口),将此处理程序添加到web.config并设置_images [i] .ImageUrl'NameOfHandler.aspx的值?20151010 / 000003819619_201512021335_1_C1