大家好,我做了一个上传照片的功能,比如我填写信息(包含照片信息之后)把照片传到了服务器的某一个目录下(比如是A电脑的D:/image)。然后等我在B电脑打开这个网站的时候,照片信息没有显示出来,我使用的是iamge控件,在控件中绑定了iamgeurl=Eval(“photo”)。photo就是我存放在数据库中的照片的地址是个绝对路径,那么我在B机器上读取信息的时候照片显示不出来,因为照片在B电脑里面没有,那么请问该如何设置照片的地址?才能保证我在B电脑上读取信息的时候可以显示照片?
调试欢乐多
我现在觉得肯定是照片的地址不对,因为我的代码是直接使用
String savePath = @"C:\Site\images\";
这样我保存在数据库中的photo的值就是C:\Site\images\。
然后再客户端图片控件iamgeurl=Eval(“photo”)是这么绑定的,因为photo指示了一个路径,那么实际上我是无法获得获得照片的,因为照片是在服务器上,我本机的C:\Site\images\里面没有照片。请问这该如何操作?我试了不少方法了,现在没有头绪了,谢谢,请大家帮忙
Image1.ImageUrl=Page.ResolveUrl("~/"+Path);
iamgeurl=<%# Page.ResolveUrl("~/"+Eval("path"))%>
Image1.ImageUrl=Page.ResolveUrl("~/"+Path);是什么意思?
VirtualPathUtility.ToAbsolute("~/")
HttpRuntime.AppDomainAppVirtualPath
Request.ApplicationPath
Page.ResolveUrl("~")
以上代码生成的结果如下:
当以网站的方式访问时,结果如下: VirtualPathUtility.ToAbsolute("~/") = /
HttpRuntime.AppDomainAppVirtualPath = /
Request.ApplicationPath = /
Page.ResolveUrl("~") = / 当以虚拟目录(http://localhost:806/web2/url.aspx)访问时,结果如下:VirtualPathUtility.ToAbsolute("~/") = /web2/
HttpRuntime.AppDomainAppVirtualPath = /web2
Request.ApplicationPath = /web2
Page.ResolveUrl("~") = /web2/ 采用第二种和第三种方法,还需要做一下处理,因为网站访问时是以/结尾,而以虚拟目录访问时则是没有/的,进行还得进行一次判断,稍微麻烦一点。
但是,这些方法在页面中使用是没有任何问题的,但是如果在 Global 的 Application_Start 事件里需要得到网站的绝对路径,则需要使用前面2种方法,如果使用第三种方法,则会报告如下的错误:
Request is not available in this context
所以,只能采取头2种方法。例如C# 代码
void Application_Start(object sender, EventArgs e)
{
System.IO.StreamWriter s = new System.IO.StreamWriter(HttpRuntime.AppDomainAppPath + "log.txt");
s.WriteLine(VirtualPathUtility.ToAbsolute("~/"));
s.WriteLine(HttpRuntime.AppDomainAppVirtualPath);
s.Close();
}