我有一个包含多个FileUpload
控件和一个上传按钮的aspx页面。在点击处理程序中,我保存了这样的文件:
string path = "...";
for (int i = 0; i < Request.Files.Count - 1; i++)
{
HttpPostedFile file = Request.Files[i];
string fileName = Path.GetFileName(file.FileName);
string saveAsPath = Path.Combine(path, fileName);
file.SaveAs(saveAsPath);
}
调用file.SaveAs()
时,会抛出:
System.Web.HttpUnhandledException: 类型异常 'System.Web.HttpUnhandledException' 被扔了。 ---&GT; System.UnauthorizedAccessException的: 访问路径 '...' 被拒绝。在 System.IO .__ Error.WinIOError(的Int32 errorCode,String maybeFullPath)at System.IO.FileStream.Init(String path, FileMode模式,FileAccess访问, Int32权限,布尔值使用权限, FileShare共享,Int32 bufferSize, FileOptions选项, SECURITY_ATTRIBUTES secAttrs,String msgPath,布尔bFromProxy)at System.IO.FileStream..ctor(字符串 path,FileMode模式,FileAccess 访问,FileShare共享,Int32 bufferSize,FileOptions选项, String msgPath,Boolean bFromProxy)
在System.IO.FileStream..ctor(String path,FileMode模式)at System.Web.HttpPostedFile.SaveAs(字符串 文件名) Belden.Web.Intranet.Iso.Complaints.AttachmentUploader.btnUpload_Click(对象 发件人,EventArgs e)at System.Web.UI.WebControls.Button.OnClick(EventArgs的 吃 System.Web.UI.WebControls.Button.RaisePostBackEvent(字符串 eventArgument)at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument)
在 System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)--- 内部异常堆栈跟踪结束--- 在 System.Web.UI.Page.HandleError(例外 吃 System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)at System.Web.UI.Page.ProcessRequest(布尔 includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)at System.Web.UI.Page.ProcessRequest()
在 System.Web.UI.Page.ProcessRequest(HttpContext的 上下文) ASP.departments_iso_complaints_uploadfiles_aspx.ProcessRequest(HttpContext的 上下文) System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步,布尔&amp; completedSynchronously)
现在这是有趣的部分。文件保存正确!那为什么要抛出这个例外?
更新
我通过检查非零ContentLength来修复它:
string path = "...";
for (int i = 0; i < Request.Files.Count - 1; i++)
{
HttpPostedFile file = Request.Files[i];
if (file.ContentLength == 0)
{
continue;
}
string fileName = Path.GetFileName(file.FileName);
string saveAsPath = Path.Combine(path, fileName);
file.SaveAs(saveAsPath);
}
答案 0 :(得分:2)
尝试使用
file.SaveAs(server.mappath(saveAsPath));
答案 1 :(得分:2)
我通过检查非零ContentLength来修复它:
string path = "...";
for (int i = 0; i < Request.Files.Count - 1; i++)
{
HttpPostedFile file = Request.Files[i];
if (file.ContentLength == 0)
{
continue;
}
string fileName = Path.GetFileName(file.FileName);
string saveAsPath = Path.Combine(path, fileName);
file.SaveAs(saveAsPath);
}
有时我忽略了简单的事情......
答案 2 :(得分:1)
有意思......我的第一个问题是,你是否绝对确定真的是抛出异常的代码行?
两个......如果你(暂时)授予所有人访问该路径的权利,它会消失吗?
您的权限现在如何设置?什么用户运行ASP.NET?你在冒充吗?