做了一个多版本的网站,后台用的编辑器是eWebeditor,NET版,后面发现上传图片或者文件之后,路径错误无法显示,必须手工修改才行。。
为了更清楚的说明问题,我下面会说的比较详细,首先是网站文件框架路径(多版本网站为实例),然后解释上传文件的文件含义,最后会根据问题说出不同的原因及解决方法:
一、网站文件框架
wootroot(网站根目录) | cn(中文版文件夹) | admin(后台目录) | eWebeditor(后台编辑器文件夹) | upload(上传处理文件夹) | default.aspx |
en(英文版文件夹) | admin(后台目录) | dialog(编辑器调用页面文件夹) | img.htm | ||
uploadimg(上传图片保存文件夹) | webconfig(各个版本目录下的配置文件) | ||||
webconfig(根目录配置文件) |
上面的栏目框架图示,应该比较易懂吧,O(∩_∩)O,意思就是一列就是网站的一级目录
二、解释文件含义
上传文件,保存文件,并返回值,主要都在编辑器目录下的upload文件夹里的default.aspx里完成的,所以下面,只解释这个页面(为了让博友更加明白,也说下点击编辑器调用的文件,即上面框架中的dialog文件夹里的img.htm文件),下面是eWebeditor编辑器界面图:
1、点击编辑器里的图片编辑,弹出如下对话框,如图:
2、下面的upload文件夹里default.aspx.cs里主要代码(即点击上面图示确认按钮,触发的事件代码):
protected void Button1_Click(object sender, EventArgs e)
{
if (this.uploadfile.PostedFile.FileName == "") //判断文件是否为空,弹出相应提升;
{
Response.Write("<script>parent.document.all(‘divProcessing’).style.display=’none’;</script>");
}
else
{
string _flag = Request["flag"]; //判断文件上传类型;
string _regex = "";
switch (_flag)
{
case "img":
_regex = @"^.+.(jpe?g|gif|bmp|png)$";
 
; break;
case "flash":
_regex = @"^.+.(swf)$";
break;
case "media":
_regex = @"^.+.(wmv|avi|rmvb|mpeg|mov)$";
break;
case "file":
_regex = @"^.+.(rar|zip|doc|pdf|txt)$";
break;
default:
_regex = @"^.+.(jpe?g|gif|swf|wmv|avi|rmvb|mpeg|mov|rar|zip|doc|pdf|txt)$";
break;
} //这段就不介绍了,判断文件类型及格式;
Regex test = new Regex(_regex);//调用事件;
if (test.IsMatch(uploadfile.PostedFile.FileName) == true)
{
ClientScriptManager cs = Page.ClientScript;
string imagesfolder = ConfigurationManager.AppSettings["uploadFolder"].ToString(); //调取配置文件路径;
string filename = UpLoadFile(uploadfile, imagesfolder); //调用uploadfile方法获取文件路径,其中uploadfile为上传文件的控件名称;
string apurl = Request.Url.ToString(); //获取当前URL路径;
string apurl2 = Request.CurrentExecutionFilePath; //获取文件目录名称;例如:/Cn/admin/eWebeditor/upload/default.aspx –详细请查看request返回当前地址大全
string tempurl = apurl.Substring(0, apurl.IndexOf(apurl2)); //截取指定位数的路径;
string appurl = Request.ApplicationPath; //调用应用程序路径;例如:www.unvs.cn
string hurl = appurl + filename.Replace("~/", ""); //这步是最关键的,直接影响是否可以上传成功,意为目录路径+文件经过替换的路径(因为配置文件调取路径含~/,如果不替换,将会出错);hurl为图片保存后返回的参数,即图片的src;
//if (appurl.Length == 1) //这句判断注释代码是判断appurl获取的长度,而对参数进行赋值;
// hurl = appurl + filename.Replace("~/", "");
//else
// hurl = appurl + "/" + filename.Replace("~/", "");
string imgpreview = tempurl + hurl; //预览效果图链接;
cs.RegisterClientScriptBlock(this.GetType(), "tt", "parent.document.all(‘divProcessing’).style.display=’none’;parent.document.all(‘imgPreview’).src=’" + imgpreview + "’;parent.document.all(‘Hurl’).value=’" + hurl + "’;parent.document.all(‘d_fromurl’).value=”;", true); //返回参数;
lblinfo.Text = "文件上传成功!<a href="">重新上传</a>";
}
else
{
lblinfo.Text = "您上传的文件类型不正确!<a href="">重新上传</a><script>parent.document.all(‘divProcessing’).style.display=’none’;</script>";
}
}
}
3、下面是cn版本目录下的webconfig配置文件,关键部分:
<appSettings>
<add key="CndbPath" value="~/cn/App_Data/##@@##.mdb"/> //这里前面几个配置的都是路径,由后台进行直接调取的;
<add key="upImgPath" value="~/uploadImg/"/>
<add key="upFilePath" value="~/uploadImg/"/>
<add key="upsmallImgPath" value="~/uploadImg/"/>
<add key="uploadFolder" value="~/uploadImg/"/>
<add key="uploadExts" value="jpg|gif|bmp"/>
<add key="SmallImgHeight" value="41"/>
<add key="SmallImgWidth" value="70"/>
<add key="DefaultLanguage" value="Kn"/>
<add key="DisableCn" value="true"/>
<add key="DisableEn" value="true"/>
<add key="DisableJn" value="true"/>
<add key=
"DisableKn" value="false"/>
<add key="VirtualPath" value=""/>
</appSettings>
4、简单分析各种图片上传路径错误解决方法:
一种图片路径为:http://www.***.cn/~/uploadimg/pic.jpg
这个错误为hurl参数,没有进行~/符号替换成" "所导致,直接将hurl 参数加上 filename.Replace("~/", "");即可;
一种图片路径为:http://uploadimg/pic.jpg
这个错误同样为hurl参数中,替换错误,没有把"/"加进去而导致,错误的写法是这样的 filename.Replace("~", "");加上/即可;暂不知为啥/没有替换,就会出现上面路径,网站url会不见,可能//两斜杠会把网站url隐藏掉;
5、以上就是几点上传图片路径返回错误的解决方法,仅个人对此的分析,不知解释是否正确或存在有误,还望同道中人指出并留下自己的见地!!O(∩_∩)O