我用asp.net写了一段上传程序的代码由于我的页面在(secure)安全目录下,代码如下:
private void btnupzb_Click(object sender, System.EventArgs e)
{
System.Web.HttpPostedFile hpf=this.upzb.PostedFile;
if(hpf.FileName.ToString().Length>0)
{
//取得上传文件名
string strFilename;
char[] de={'\\'};
string[] AFilename=hpf.FileName.Split(de);
strFilename=AFilename[AFilename.Length-1];
//取得当前应用程序根路径
string path=Server.MapPath(".");
char[] de1={'s'};
string[] n=path.Split(de1);
string N=n[n.Length-2];
this.lblzb.Text=strFilename;
//文件上传至应用程序根路径
hpf.SaveAs(N+"\\"+strFilename);
}
else
{
lblerror.Text="您没有选择文件!";
}
}
OK ,我在本地调试的时候这段代码可以通过,并且文件也上传到了iis所指定的应用程序主目录下
然而我将应用程序放到发布WEB服务器上,就会报:
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------未找到路径“c:\windows\system32\inetsrv\martelc.com\新建 文本文档1.txt”的一部分。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IO.DirectoryNotFoundException: 未找到路径“c:\windows\system32\inetsrv\martelc.com\新建 文本文档1.txt”的一部分。这个错误,我并没有指定过这个目录阿?这个inetsrv目录是怎么回事?
在web服务器上iis指定的目录是inetpub\wwwroot\应用程序这个目录阿。
哪位大虾能告诉我怎么回事,应该怎么解决,顺便说下,web服务器是2003,我开发用的是2000+.net2003后来我将路径指定为绝对路径string path="c:\inetpub\wwwroot\aa",可是结果还是一样,我认为应该是服务器的问题,可是问题出在哪里啊?请各位高手指点一下小弟吧,我都要疯掉了!! 服务器iis设置与我本地设置也是一样,但是每次inetsrv目录下就会莫名其妙出现一个类似我网站名字的目录.这个服务器同时也有几个WEB站点在跑,其运行正常.
private void btnupzb_Click(object sender, System.EventArgs e)
{
System.Web.HttpPostedFile hpf=this.upzb.PostedFile;
if(hpf.FileName.ToString().Length>0)
{
//取得上传文件名
string strFilename;
char[] de={'\\'};
string[] AFilename=hpf.FileName.Split(de);
strFilename=AFilename[AFilename.Length-1];
//取得当前应用程序根路径
string path=Server.MapPath(".");
char[] de1={'s'};
string[] n=path.Split(de1);
string N=n[n.Length-2];
this.lblzb.Text=strFilename;
//文件上传至应用程序根路径
hpf.SaveAs(N+"\\"+strFilename);
}
else
{
lblerror.Text="您没有选择文件!";
}
}
OK ,我在本地调试的时候这段代码可以通过,并且文件也上传到了iis所指定的应用程序主目录下
然而我将应用程序放到发布WEB服务器上,就会报:
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------未找到路径“c:\windows\system32\inetsrv\martelc.com\新建 文本文档1.txt”的一部分。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IO.DirectoryNotFoundException: 未找到路径“c:\windows\system32\inetsrv\martelc.com\新建 文本文档1.txt”的一部分。这个错误,我并没有指定过这个目录阿?这个inetsrv目录是怎么回事?
在web服务器上iis指定的目录是inetpub\wwwroot\应用程序这个目录阿。
哪位大虾能告诉我怎么回事,应该怎么解决,顺便说下,web服务器是2003,我开发用的是2000+.net2003后来我将路径指定为绝对路径string path="c:\inetpub\wwwroot\aa",可是结果还是一样,我认为应该是服务器的问题,可是问题出在哪里啊?请各位高手指点一下小弟吧,我都要疯掉了!! 服务器iis设置与我本地设置也是一样,但是每次inetsrv目录下就会莫名其妙出现一个类似我网站名字的目录.这个服务器同时也有几个WEB站点在跑,其运行正常.
改为this.Response.Write(N+"\\"strFilename);服务器运行也报同样的错.本地运行却没有一点问题.为什么啊?
如果目录是NTFS格式,请确保everyone用户有写的权限另外,建议楼主升级到VS2005,用fileupload控件直接就可以取得文件名,不用转换得那么麻烦.
hpf.SaveAs(N+"\\"+strFilename);
你这个N,
string path=Server.MapPath(".");
char[] de1={'s'};
string[] n=path.Split(de1);
string N=n[n.Length-2];
看看,它等于的是当前目录的上一级父目录名,这没有错,但是保存的时候你用:
hpf.SaveAs(N+"\\"+strFilename);
这样的话,可想而知,是一个相对路径而非绝对路径,运行到Save的时候,
它就自动给这个相对路径加上了运行目录,也就是
c:\windows\system32\inetsrv\
这样自然错了,你应该用绝对路径保存:
hpf.SaveAs(Server.MapPath("../");+"\\"+strFilename);
或者你知道文件是放在网站根目录下的某目录如UPLOAD中的话,就这样:
hpf.SaveAs(Server.MapPath("/upload");+"\\"+strFilename);
用'S'去分割是什么意思呢?
不过,不影响出错的原因
用这个试试
这是上传
[DirectoryNotFoundException: 未找到路径“c:\windows\system32\inetsrv\martelc.com\新建文本文档111.txt”的一部分。]
System.IO.__Error.WinIOError(Int32 errorCode, String str) +287
dpjwz.control.alterApplication.btnupzb_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\dpjwz\control\alterapplication.ascx.cs:225
上面的这个c:\inetpub\wwwroot\dpjwz\control\alterapplication.ascx.cs:225并不存在
实际在服务器上的路径为c:\inetpub\wwwroot\www.smartelc.com\control\alterapplication.ascx.cs:225
dpjwz 这个目录是在我开发的时候使用的一个目录,上传至服务器后,我把文件里关于这个目录的信息已经删除了.这里出现了这个目录是什么原因阿?我本地调试的也是删除了这个目录的,调试通过.
IT菜鸟所说的根我的没什么区别阿,我前面就已经把上传对象实例化了 hpf对象阿,你意思是先指定完整的存放路径阿,晕,我看看.估计和这个差不多
磁盘写入权限或IIS权限等,认真检查一遍
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------未找到路径“c:\windows\system32\inetsrv\martelc.com\新建文本文档111.txt”的一部分。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IO.DirectoryNotFoundException: 未找到路径“c:\windows\system32\inetsrv\martelc.com\新建文本文档111.txt”的一部分。源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 堆栈跟踪:
[DirectoryNotFoundException: 未找到路径“c:\windows\system32\inetsrv\martelc.com\新建文本文档111.txt”的一部分。]
System.IO.__Error.WinIOError(Int32 errorCode, String str) +287
System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync, String msgPath, Boolean bFromProxy) +888
System.IO.FileStream..ctor(String path, FileMode mode) +52
System.Web.HttpPostedFile.SaveAs(String filename) +48
dpjwz.control.alterApplication.btnupzb_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\dpjwz\control\alterapplication.ascx.cs:225
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain() +1292
实际上即使我注释掉上传语句及取路径语句,只保留下取文件名的语句即:
System.Web.HttpPostedFile hpf=this.upzb.PostedFile;//取得上传文件名
string strFilename;
char[] de={'\\'};
string[] AFilename=hpf.FileName.Split(de);
strFilename=AFilename[AFilename.Length-1];this.lblzb.Text=strFilename;也是报同样的错误,郁闷中...
已经提示的很清楚了,
asp.net 创建一个文件时,要保存这个文件的所有上级父文件夹都有读的权限,只要有一级没有,就报这个错。
Function SaveImage() as Boolean '图片上传
If Images.postedFile.ContentLength=0 then
lblAdd.text="图片上传失败!"
return false
end if
If Images.postedFile.ContentLength > 1048576 then '图片不能大于1M
lblAdd.text="图片不能大于1M,请做适当地处理后再上传。"
return false
end if Dim FileName as string
FileName=Images.PostedFile.FileName
'lblSoftImage.text=FileName
if Array.IndexOf(AImageExt,Path.GetExtension(FileName).ToUpper ) < 0 then
lblAdd.text="只能上传BMP、JPG、GIF格式图片"
Return False
End IF
SoftImageName=GetNewFileName(Request.QueryString("ID"),(Path.GetExtension(FileName)).ToUpper)
Images.postedFile.SaveAs(SoftImageName)
SaveZPInfo(Request.QueryString("ID"),Path.GetFileName(SoftImageName))
lblAdd.text="照片上传成功"
Return True
end Function '图片上传
上面那个例子中的 GetNewFileName()函数:
Function GetNewFileName(ID as String,ext as string) as string'给一个扩展名返回一个可用的文件名
Dim NewFileName As String
Dim Dir As String=Server.MapPath("Photo/AJDJB/.")
Dim i as integer=1
Dim sFileName as string=Server.MapPath("Photo/AJDJB/.") & "\" & ID & "_"
NewFileName=sFileName & "1" & ext
While (File.Exists(NewFileName))
i=i+1
NewFileName=sFileName & i & ext
End While
Return NewFileName
End Function
先写一个类:
Public Class GetServer
Public Function getserverpath()
Dim serverpath As String
serverpath = System.Web.HttpContext.Current.Server.MapPath("")
Return serverpath
End Function
End Class然后在你要用到server.path的时候调用这个类来获取服务器路径。