网站生成图片的路径问题

时间:2022-08-25 16:13:11
我的网站有一个BUTTOM,单击后会生成一张图片,在image控件上显示,但是生成的图片的路径是"F:\\useforcompany\\KimonOASystem\\Modules\\ProductSystem\\Picture".
这样在本机可以正确浏览到,但是不是本机就看不到这张图片?请教有什么解决办法?
我取图片的路径的方式是:string filepath = Server.MapPath(@"~/Modules/ProductSystem/Picture");

17 个解决方案

#1


不要进行Server.MapPath就可以了
这个是映射到服务器的物理路径用的

#2


不行啊 不用Server.MapPath  我将绝对路径写进去  也是F:\\useforcompany\\KimonOASystem\\Modules\\ProductSystem\\Picture
 
我想要的效果是在网页上显示的图片路径是http://XXX.XX.X.X//...这样才能放在服务器上让其他人浏览

#3


因为我的图片是根据数据动太生成的柱形图表,所以也不能一开始就绑定在控件上 大家帮帮忙

#4


用一个页面来读取并输出这个图片。这样还可以让访客不知道你的图片真实地址!

#5


就是不知道如何才能让客户端读到我的地址啊,图片输出的路径是F:\\useforcompany\\KimonOASystem\\Modules\\ProductSystem\\Picture
这样的路径客户端是读不到的
在线等~~解决就结帖

#6


mydreamf(小枫) ( ) 信誉:100    Blog   加为好友  2007-06-30 10:29:16  得分: 0  
 
 
   就是不知道如何才能让客户端读到我的地址啊,图片输出的路径是F:\\useforcompany\\KimonOASystem\\Modules\\ProductSystem\\Picture
这样的路径客户端是读不到的
在线等~~解决就结帖
  
----------------------------------------------------------------------
用一个专门的页面获取并输出,客户端就不需要知道你的地址啊!因为他始终请求一个页面!只不过参数不同而已!

#7


<asp:image src="picture.aspx?ID=0001" />
你把src连接到一个页面,这个页面的功能就是生成一个图片。

#8


picture.aspx里面的内容:
  protected void Page_Load(object sender, EventArgs e)
    {
        byte[] imgByteArray = GetImage("1");
        if (imgByteArray == null) return;
        if (imgByteArray.Length <= 78) return;
        MemoryStream stream = new MemoryStream();
        Int32 offset = 78;//去除78字节的表头
        stream.Write(imgByteArray, offset, imgByteArray.Length - offset);
        //显示图片
        System.Drawing.Image m_Bitmap = System.Drawing.Image.FromStream(stream);
        
        //成功的方法1
        //string path = Server.MapPath(".");
        //string filename = path + "\\temp";
        //m_Bitmap.Save(filename);
        //成功的方法1
//成功的方法2
        byte[] mybytes = stream.GetBuffer();

        Response.Clear();
        Response.ContentType = "jpeg";
        Response.BinaryWrite(mybytes);
        Response.End();
//成功的方法2
        stream.Close();
    }

    private byte[] GetImage(string employeeID)
    {
        string connString;
        //数据库连接字符串,根据你的需要修改
        connString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\NORTHWND.MDF;Integrated Security=True;User Instance=True";
        using (SqlConnection conn = new SqlConnection(connString))
        {
            string sqlSelect = "SELECT Photo FROM Employees WHERE EmployeeID = " + employeeID;

            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = sqlSelect;
            conn.Open();
            using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.SingleRow))
            {
                if (dr.Read())
                {
                    if (dr[0] != null)
                    {
                        byte[] byteImg = (byte[])dr[0];
                        return byteImg;
                    }
                }
            }
        }
        return null;
    }

用的Northwind数据库

#9


能不能不单独做一个页面呢?就直接在 image控件上显示图片 让路径跟http://zi.csdn.net/2007.06/now120x60.gif   类似

#10


mydreamf(小枫) ( ) 信誉:100    Blog   加为好友  2007-06-30 10:42:59  得分: 0  
 
 
   能不能不单独做一个页面呢?就直接在 image控件上显示图片 让路径跟http://zi.csdn.net/2007.06/now120x60.gif   类似
  
-----------------------------------------------------------
那你要在IIS上做虚拟目录!不然是没有办法的!

#11


我做了虚拟目录了 但是路径还是一样啊

#12


设一站点:http://zi.csdn.net/指到F:\\useforcompany\\KimonOASystem\\Modules\\下面。生成图片地址的时候就这地址:F:\\useforcompany\\KimonOASystem\\Modules\\ProductSystem\\Picture\\1.gif.
那么路径为:http://zi.csdn.net/ProductSystem/picture/1.gif

#13


在保存图片地址的时候,用虚拟路径啊!

#14


这是我保存路径的方法 public string CreateColumn()
        {
            Microsoft.Office.Interop.Owc11.ChartSpace objCSpace = new Microsoft.Office.Interop.Owc11.ChartSpaceClass();//创建ChartSpace对象来放置图表   
            Microsoft.Office.Interop.Owc11.ChChart objChart = objCSpace.Charts.Add(0);//在ChartSpace对象中添加图表,Add方法返回chart对象

            //指定图表的类型
            objChart.Type = Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeColumnClustered;

            //指定图表是否需要图例
            objChart.HasLegend = true;

            //标题
            objChart.HasTitle = true;
            objChart.Title.Caption = _title;
            //   objChart.Title.Font.Bold=true;
            //   objChart.Title.Font.Color="blue";


            

            ////x,y轴的图示说明
            //objChart.Axes[0].HasTitle = true;
            //objChart.Axes[0].Title.Caption = "时间";
            //objChart.Axes[1].HasTitle = true;
            //objChart.Axes[1].Title.Caption = "利润";


            //添加一个series
            Microsoft.Office.Interop.Owc11.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);


            //给定series的名字
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,
       Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), SeriesName);
            //给定分类
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,
       Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strCategory);
            //给定值
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,
       Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strValue);

            Microsoft.Office.Interop.Owc11.ChDataLabels dl = objChart.SeriesCollection[0].DataLabelsCollection.Add();
            dl.HasValue = true;


            string filename = "123.gif";
            string strAbsolutePath =_phaysicalimagepath + "\\" + filename;
            objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight);//输出成GIF文件.

            return strAbsolutePath;

        }

#15


_phaysicalimagepath 的值是 Server.MapPath(@"~/Modules/ProductSystem/Picture");

#16


string strAbsolutePath =_phaysicalimagepath + "\\" + filename;
--------------------------------------------------------------
你完全可以这样写
string strAbsolutePath ="F:\\Img\\Picture"+ "\\" + filename;
把web和保存路径分开,不过Picture文件夹要加asp.net的操作权限。然后把虚拟目录指过去就OK了

#17


感谢大家..虽然问题还是没解决-_-#  下班了  回去再想办法  结帖了

#1


不要进行Server.MapPath就可以了
这个是映射到服务器的物理路径用的

#2


不行啊 不用Server.MapPath  我将绝对路径写进去  也是F:\\useforcompany\\KimonOASystem\\Modules\\ProductSystem\\Picture
 
我想要的效果是在网页上显示的图片路径是http://XXX.XX.X.X//...这样才能放在服务器上让其他人浏览

#3


因为我的图片是根据数据动太生成的柱形图表,所以也不能一开始就绑定在控件上 大家帮帮忙

#4


用一个页面来读取并输出这个图片。这样还可以让访客不知道你的图片真实地址!

#5


就是不知道如何才能让客户端读到我的地址啊,图片输出的路径是F:\\useforcompany\\KimonOASystem\\Modules\\ProductSystem\\Picture
这样的路径客户端是读不到的
在线等~~解决就结帖

#6


mydreamf(小枫) ( ) 信誉:100    Blog   加为好友  2007-06-30 10:29:16  得分: 0  
 
 
   就是不知道如何才能让客户端读到我的地址啊,图片输出的路径是F:\\useforcompany\\KimonOASystem\\Modules\\ProductSystem\\Picture
这样的路径客户端是读不到的
在线等~~解决就结帖
  
----------------------------------------------------------------------
用一个专门的页面获取并输出,客户端就不需要知道你的地址啊!因为他始终请求一个页面!只不过参数不同而已!

#7


<asp:image src="picture.aspx?ID=0001" />
你把src连接到一个页面,这个页面的功能就是生成一个图片。

#8


picture.aspx里面的内容:
  protected void Page_Load(object sender, EventArgs e)
    {
        byte[] imgByteArray = GetImage("1");
        if (imgByteArray == null) return;
        if (imgByteArray.Length <= 78) return;
        MemoryStream stream = new MemoryStream();
        Int32 offset = 78;//去除78字节的表头
        stream.Write(imgByteArray, offset, imgByteArray.Length - offset);
        //显示图片
        System.Drawing.Image m_Bitmap = System.Drawing.Image.FromStream(stream);
        
        //成功的方法1
        //string path = Server.MapPath(".");
        //string filename = path + "\\temp";
        //m_Bitmap.Save(filename);
        //成功的方法1
//成功的方法2
        byte[] mybytes = stream.GetBuffer();

        Response.Clear();
        Response.ContentType = "jpeg";
        Response.BinaryWrite(mybytes);
        Response.End();
//成功的方法2
        stream.Close();
    }

    private byte[] GetImage(string employeeID)
    {
        string connString;
        //数据库连接字符串,根据你的需要修改
        connString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\NORTHWND.MDF;Integrated Security=True;User Instance=True";
        using (SqlConnection conn = new SqlConnection(connString))
        {
            string sqlSelect = "SELECT Photo FROM Employees WHERE EmployeeID = " + employeeID;

            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = sqlSelect;
            conn.Open();
            using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.SingleRow))
            {
                if (dr.Read())
                {
                    if (dr[0] != null)
                    {
                        byte[] byteImg = (byte[])dr[0];
                        return byteImg;
                    }
                }
            }
        }
        return null;
    }

用的Northwind数据库

#9


能不能不单独做一个页面呢?就直接在 image控件上显示图片 让路径跟http://zi.csdn.net/2007.06/now120x60.gif   类似

#10


mydreamf(小枫) ( ) 信誉:100    Blog   加为好友  2007-06-30 10:42:59  得分: 0  
 
 
   能不能不单独做一个页面呢?就直接在 image控件上显示图片 让路径跟http://zi.csdn.net/2007.06/now120x60.gif   类似
  
-----------------------------------------------------------
那你要在IIS上做虚拟目录!不然是没有办法的!

#11


我做了虚拟目录了 但是路径还是一样啊

#12


设一站点:http://zi.csdn.net/指到F:\\useforcompany\\KimonOASystem\\Modules\\下面。生成图片地址的时候就这地址:F:\\useforcompany\\KimonOASystem\\Modules\\ProductSystem\\Picture\\1.gif.
那么路径为:http://zi.csdn.net/ProductSystem/picture/1.gif

#13


在保存图片地址的时候,用虚拟路径啊!

#14


这是我保存路径的方法 public string CreateColumn()
        {
            Microsoft.Office.Interop.Owc11.ChartSpace objCSpace = new Microsoft.Office.Interop.Owc11.ChartSpaceClass();//创建ChartSpace对象来放置图表   
            Microsoft.Office.Interop.Owc11.ChChart objChart = objCSpace.Charts.Add(0);//在ChartSpace对象中添加图表,Add方法返回chart对象

            //指定图表的类型
            objChart.Type = Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeColumnClustered;

            //指定图表是否需要图例
            objChart.HasLegend = true;

            //标题
            objChart.HasTitle = true;
            objChart.Title.Caption = _title;
            //   objChart.Title.Font.Bold=true;
            //   objChart.Title.Font.Color="blue";


            

            ////x,y轴的图示说明
            //objChart.Axes[0].HasTitle = true;
            //objChart.Axes[0].Title.Caption = "时间";
            //objChart.Axes[1].HasTitle = true;
            //objChart.Axes[1].Title.Caption = "利润";


            //添加一个series
            Microsoft.Office.Interop.Owc11.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);


            //给定series的名字
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,
       Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), SeriesName);
            //给定分类
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,
       Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strCategory);
            //给定值
            ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,
       Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strValue);

            Microsoft.Office.Interop.Owc11.ChDataLabels dl = objChart.SeriesCollection[0].DataLabelsCollection.Add();
            dl.HasValue = true;


            string filename = "123.gif";
            string strAbsolutePath =_phaysicalimagepath + "\\" + filename;
            objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight);//输出成GIF文件.

            return strAbsolutePath;

        }

#15


_phaysicalimagepath 的值是 Server.MapPath(@"~/Modules/ProductSystem/Picture");

#16


string strAbsolutePath =_phaysicalimagepath + "\\" + filename;
--------------------------------------------------------------
你完全可以这样写
string strAbsolutePath ="F:\\Img\\Picture"+ "\\" + filename;
把web和保存路径分开,不过Picture文件夹要加asp.net的操作权限。然后把虚拟目录指过去就OK了

#17


感谢大家..虽然问题还是没解决-_-#  下班了  回去再想办法  结帖了